Увеличение идентификатора на единицу при дублировании с PHP - PullRequest
0 голосов
/ 13 декабря 2018

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

Вот моя функция:

function checkId($n) {
    global $mysqli;
    $query = mysqli_query($mysqli, "SELECT id FROM comments WHERE id = ".$n.""); //line error
    if (!$query) {
        die('Error: ' . mysqli_error($mysqli));
    }
    if(mysqli_num_rows($query) > 0){
        checkId($n++);
        return;
    } else {
        return $n;
    }
}

Возможно, вы скажете мне использовать AUTO_INCREMENT, но в этой ситуации яне в состоянии сделать.Ошибка: Fatal error: Maximum function nesting level of '100' reached, aborting!

Я пытался исправить это сам, но я не могу, вы можете мне помочь?Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте это простое упражнение : добавьте оператор echo / print прямо в функцию checkId, которая печатает значение $ n ... Вы должны заметить, что значение $ n будет таким же100 раз подряд вплоть до появления фатальной ошибки.

Причина : В выражении checkId($n++) вы используете ++ в качестве оператора "постфиксного приращения".Это означает, что переменная $n будет увеличиваться только после вызова вложенной функции checkId(...).В основном это:

checkId($n++)

... это просто сокращение для этого:

checkId($n)
$n = $n + 1

Второй вызов checkId (с тем же значением $n)в конечном итоге вызовет checkId($n++), что вызовет третий вызов с точно таким же значением $n, и так далее, пока PHP не скажет "это слишком много" и не будетвверх с "Фатальной ошибкой" ... которая является ошибкой "Переполнения стека", кстати: P

Вместо , используйте префикс приращение выражение checkId(++$n) или что-то тривиально простое, например checkId($n + 1). Или, еще лучше, , выясните, как выполнить работу за один ОДИН вызов mysqli_query (кстати, это отдельный вопрос).Думая, что вы можете просто делать запросы несколько раз, пока не получите что-то правильное, значит, ваше приложение не будет настолько масштабируемым, если / когда вы получите кучу людей, использующих его. Просто позвольте базе данных сделать тяжелую работу. :)

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