MySQL запрос в PHP дает очевидный неверный результат

StackOverflow https://stackoverflow.com/questions/646746

  •  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 " или как там его текущее значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top