PDO Last Insert ID всегда правильный? - PullRequest
21 голосов
/ 27 марта 2012

У меня есть следующий код:

<?
$query =$db->prepare("INSERT INTO a_table (id, a_field) VALUES ('', (:a_field)");
$query->bindParam(":a_field", $a_value);
$query->execute();
$last_id = $db->lastInsertId('a_table');
?>

Я хочу спросить вот что. Представьте себе, когда два человека загружают страницу в одно и то же время, возможна ли опасность того, что запрос другого лица будет вставлен до получения последнего идентификатора, смешивая идентификаторы?

Ответы [ 3 ]

26 голосов
/ 27 марта 2012

Нет, такая ситуация невозможна.Метод $ db-> lastInsertId () возвращает последний вставленный идентификатор для этого соединения с БД.На другой странице будет другое соединение и еще один последний вставленный идентификатор.

6 голосов
/ 27 марта 2012

PDO вернет вам последний идентификатор, вставленный текущим активным подключением к базе данных.

1 голос
/ 14 января 2015

Только что столкнулся со следующей ситуацией

Есть файл post.php, который включает в себя другой файл (например, insert.php).

Весь код для вставки в MySQL находится в insert.php

В insert.php есть код $id_of_inserted_row = $db->lastInsertId();

Тогда в insert.php есть echo $id_of_inserted_row;, который показываетправильное значение.

Но echo $id_of_inserted_row; в post.php показывает неверное значение (как я вижу, показывает на 7 цифр меньше фактического значения).Я не понимаю почему, просто нужно принять во внимание.

Обновление

Извините, выше написано было потому, что вставили в две таблицы и по ошибке использовали одинаковые $id_of_inserted_row = $db->lastInsertId();для обеих таблиц.

Итак, у меня такой же вывод, как и в других ответах: lastInsertId() получает идентификатор последней вставленной строки.

Столкнулся с ситуацией.Я вставил 2 строки в MySQL.В таком случае я вижу, что lastInsertId () является идентификатором первой вставленной строки (не последней).Не понимаю, почему ... Найденный ответ https://stackoverflow.com/a/12574752/2118559

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...