MySQL запрос в PHP дает очевидный неверный результат
-
22-07-2019 - |
Вопрос
Я использую PHP и PHPMyAdmin для создания небольшого профиля сайта. Я даю участникам идентификационный номер, исходя из того, что это самый большой номер в базе данных, +1
Я сделал 25 тестов, прежде чем я получил скрипт PHP, где я хотел, чтобы это было.
Затем я удалил эти 25 записей, используя PHPMyAdmin.
Но теперь, когда мой PHP-код делает это:
function getLatestID() {
$query = "SELECT max(member_id) FROM members";
$result = @mysql_query($query) or showError("unable to query database for user information");
if (!($record = mysql_fetch_array($result))) return null;
return $record[0];
}
Я получил неправильный номер.
Тестовый сценарий: таблица базы данных содержит 3 записи с идентификаторами 1, 2 и 3.
Я запускаю сеанс отладки и ставлю точку останова в возвращаемом $ record [0]
.
Я проверяю его содержимое и вместо 3, которое является наибольшим числом, это 28.
Как и в 25 + 3 = 28, 25 записей, которые я уже удалил ...
Кто-нибудь знает, что вызывает это и как я могу это исправить?
Решение
Вероятно, потому, что у вас установлено auto_increment и запрос возвращает самый высокий идентификатор. Когда вы удалили другие записи, вы, вероятно, не сбросили счетчик автоматического приращения.
Другие советы
Если вы используете auto_increment
в MySQL, удаление записей не приведет к уменьшению следующего значения.
Вы можете очистить таблицу с помощью TRUNCATE TABLE mytable
- это сбросит значение.
Вы также можете изменить значение, которое автоинкремент считает следующим значением для выделения:
ALTER TABLE members AUTO_INCREMENT = 3;
Обратите внимание, что если вы введете значение, которое меньше текущего максимального значения в столбце автоинкремента, оно изменит значение на MAX + 1. Чтобы увидеть текущее следующее значение, сделайте это:
SHOW CREATE TABLE members;
В конце определения таблицы будет показано " AUTO_INCREMENT = 26
" или как там его текущее значение.