Статьи Программирование в PHP

ID последней записи в базе данных MySQL в PHP

Обычно, задача узнать последний добавленный идентификатор (id) возникает после запроса вставки данных INSERT. Причем, поле, которое будет содержать это значение, назначается автоматически базой данных.

Автоматическое назначение id в базе данных используется очень часто. При этом сразу решается проблема уникальности идентификатора – он не будет дублироваться, и не нужно реализовывать специальный код для его генерации. Тем более что любая СУБД обязательно включает в себя такой функционал.

* Стоит уточнить, что иногда есть необходимость генерировать идентификатор по другим правилам. Такое делается либо для удобства дальнейшей работы – например, включение в id значения, которые будет иметь какой-то смысл – текущая дата или тип записи. Либо, наоборот, идентификатор формируется набором случайных символов для обеспечения безопасности. В этом случае, сложно будет его случайно указать или угадать.

Для нахождения последнего id, созданного при вставке дынных в MySQL, в PHP используется функция mysql_insert_id. Обязательных параметров у нее нет, поэтому в коде просто присваиваем значение, возвращаемое этой функции в переменную или сразу используем ее в качестве параметра в другой функции.

$last_id = mysql_insert_id(); // запись значения в переменную
my_function(mysql_insert_id()); // указание параметром в другую функцию

В разработке, такой подход наиболее простой и удобный. Но применять его нужно, зная, что эта функция возвращает идентификатор, созданный для любой из таблиц последним. Т.е. может возникнуть ситуация, когда в "один момент времени" в БД будет добавлено две записи. При этом функция mysql_insert_id будет возвращать id записи, добавленной последней.

Кроме того, если между интересующим запросом вставки данных и функцией определения идентификатора будет выполнен другой запрос, не использующий поля с атрибутами AUTO_INCREMENT (поле со счетчиком), то будет возвращено значение 0.

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


Комментарии

Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Под каким номером в алфавите буква «Б»? (цифра)