Вопрос по mysql, php – Лучший способ найти последний вставленный идентификатор в MySQL, используя php

5

Мне интересно, как лучше всего получить последний вставленный идентификатор после запроса 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, это может быть ненадежным.

Может ли кто-нибудь предоставить надежное и быстрое решение для решения этой задачи?

Я нашел эту функцию на php.net, и автор заявил, что эта функция решает все проблемы, вызванныеmysql_insert_id! Ahoura Ghotbi
@YourCommonSense хорошо, это честно, спасибо за разъяснение причины по крайней мере. но это был также вопрос о выполнении кодов. Ahoura Ghotbi
Это неправильное использование LAST_INSERT_ID () там. Вы получите его как обычный столбец. mysql_num_rows () всегда будет один для этого запроса. Corbin
-1 за вопрос вместо чтения мануала Your Common Sense
@AhouraGhotbi Я никогда не видел полезного комментария к документам php.net. Обычно они полны грубой работы, написанной людьми, которые не понимают должным образом функции, обсуждаемые на страницах. Функция, которую вы опубликовали, всегда будет возвращать 2. (Если запрос не выполнен, тогда он вернет 1.) Corbin

Ваш Ответ

2   ответа
4

используя один оператор INSERT, LAST_INSERT_ID () возвращает значение, сгенерированное только для первой вставленной строки. Причина этого в том, чтобы можно было легко воспроизвести ту же инструкцию INSERT на каком-либо другом сервере.

Если вы собираетесь скопировать / вставить что-либо из документации, вам следует процитировать это.
10

SELECT LAST_INSERT_ID() надежный и достаточно безопасный?

Из MySQL Doc: Сгенерированный идентификатор поддерживается на сервере для каждого подключения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющего на столбец AUTO_INCREMENT этим клиентом. На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значения AUTO_INCREMENT.

Примечание с форума: (...) Однако все ставки отключены, если по какой-то причине вы используете постоянные соединения, например, через mysql_pconnect () (...)

Ну, это мой вопрос, как бы это отреагировало, когда много последовательных SQL-соединений и много SQL-запросов запущено. Ahoura Ghotbi
Я думаю, что ссылки на документацию были бы лучше, чем случайное сообщение на форуме без цитат (dev.mysql.com/doc/refman/5.0/en/…). Но, это правильно, и заметка mysql_pconnect является хорошей заметкой.
это прекрасно, большое спасибо за разъяснение этого для меня! такSELECT LAST_INSERT_ID() FROM $table будет надежным для этого права? и это самый эффективный код, верно? Ahoura Ghotbi
@AhouraGhotbi:LAST_INSERT_ID() за соединение.

Похожие вопросы