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