Идентификатор последней записи PDO всегда правильный?

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

<? $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'); ?> 

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

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

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

Просто столкнулся с следующей ситуацией

Имейте файл 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 против какого-либо другого сервера.