Мне интересно, какое лучшее решение – получить последний вставленный идентификатор после запроса mysql?
Я нашел следующие решения:
<?php function get_current_insert_id($table) { $q = "SELECT LAST_INSERT_ID() FROM $table"; return mysql_num_rows(mysql_query($q)) + 1; } ?>
или даже с использованием функции php mysql_insert_id
, но, по-видимому, эта функция не будет работать хорошо с bigint (это то, что я использую для поля ID), и если есть много последовательных запросов sql, это может быть ненадежным.
Может ли кто-нибудь обеспечить надежное и быстрое решение для решения этой задачи?
Является ли SELECT LAST_INSERT_ID()
надежным и безопасным?
Из MySQL Doc: Идентификатор, который был сгенерирован, поддерживается на сервере для каждого подключения. Это означает, что значение, возвращаемое функцией для данного клиента, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющим на столбец AUTO_INCREMENT этого клиента. Это значение не может повлиять на других клиентов, даже если они генерируют собственные значения AUTO_INCREMENT.
Примечание с форума: (…) Все ставки отключены, хотя, если по какой-то причине вы используете постоянные подключения, например, через mysql_pconnect () (…)
Если вы вставляете несколько строк с помощью одного оператора INSERT, LAST_INSERT_ID () возвращает значение, сгенерированное только для первой вставленной строки. Причина этого заключается в том, чтобы дать возможность легко воспроизвести тот же оператор INSERT против какого-либо другого сервера.