Подтвердить что ты не робот

Идентификатор последней записи 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');
?>

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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