Ответ 1
Нет, эта ситуация невозможна. Метод $db- > lastInsertId() возвращает последний вставленный идентификатор для этого контура БД. На другой странице будет другое соединение и еще один последний вставленный идентификатор.
У меня есть следующий код:
<?
$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() является идентификатором первой вставленной строки (не последней). Не понимаю, почему... Найден ответ fooobar.com/info/272617/...
Важно. Если вы вставляете несколько строк с помощью одного оператора INSERT, LAST_INSERT_ID() возвращает значение, сгенерированное только для первой вставленной строки. Причина этого заключается в том, чтобы дать возможность легко воспроизвести тот же оператор INSERT против какого-либо другого сервера.