MAX ID count работает только через раз - PullRequest
0 голосов
/ 16 ноября 2018

Проблема: Я хочу получить МАКС. "SID" из моей базы данных и добавить его. Я обрабатываю ввод через форму, которую я отправляю через HTTP Post Method. Я получаю текущий максимальный SID из своей базы данных, затем помещаю значение в поле ввода HTML и добавляю его. По какой-то причине это работает через раз. Таким образом, я получаю вывод:

  1. Try = 1
  2. Попробуйте = 1
  3. Попробуйте = 2
  4. Попробуйте = 2

и так далее. Было бы хорошо, если бы кто-то мог указать мне правильное направление.

PHP получить MAX (ID):

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "soccer";

    $conn = mysqli_connect($servername, $username, $password, $dbname);

    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "Connected successfully";

    $sql = "SELECT MAX(SID) FROM spieler";
    $result = mysqli_query($conn, $sql);

    if(mysqli_num_rows($result) > 0)
    {
        while($row = mysqli_fetch_assoc($result))
        {
            $lastID = $row["MAX(SID)"];
        }
    }

    mysqli_close($conn);

PHP вставка в базу данных:

        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "soccer";

        $conn = mysqli_connect($servername, $username, $password, $dbname);

        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
        echo "Connected successfully";

        ?><br><?php

        $sql = "INSERT INTO spieler VALUES ('$sid', '$name', '$verein', 
        '$position', '$einsaetze', '$startelf', '$tore',
        '$torschuesse', '$eigentore', '$vorlagen', '$elfmeter', 
        '$verwandelt', '$gegentore', '$gelb',
        '$rot', '$fouls', '$zweikampf', '$pass', '$note')";

        if(mysqli_query($conn, $sql)){
            echo "Success";
        }else{
            echo "Failed" . mysqli_error($conn);
        }

        mysqli_close($conn);

Поле ввода HTML & PHP:

 <tr>
     <td><input id="SID" name="SID" readonly value="<?php echo $lastID += 1; 
     ?>"></td>
 </tr>

Скриншот страницы:

Screenshot В абзаце «Spieler ID:» я помещаю «SID», чтобы при каждой загрузке страницы следующий свободный идентификатор автоматически загружался в поле ввода.

1 Ответ

0 голосов
/ 16 ноября 2018

Я хочу получить МАКС. SID из моей базы данных и добавить один

Нет. Вы не Вы действительно, действительно нет.

Это Проблема XY.

Вы можете сделать это, запустив системную блокировку и автономную транзакцию. Было бы немного безопаснее и намного эффективнее сохранять последнее назначенное значение (или следующее) в качестве переменной состояния в таблице, а не опрашивать назначенные значения. Но это все равно игнорирует тот факт, что вы приложите немало усилий, чтобы назначить правила тому, что является суррогатным идентификатором и, следовательно, не содержит значимых данных. Это также в значительной степени ограничивает пропускную способность и создает значительные риски как случайного, так и преднамеренного отказа в обслуживании.

Чтобы еще больше усугубить ошибку, MySQL предоставляет механизм, позволяющий избежать всей этой боли из коробки , используя идентификаторы автоинкремента .

Хотя кто-то может утверждать, что они не являются переносимыми, следовательно, может быть целесообразно найти другое решение, которое явно здесь не применимо, когда ваш код не имеет другой абстракции от базовой СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...