Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

$pdo->lastInsertId(); Возможно ли некорректное значение?

#php


Допустим имеем такой код:

$stmt = $pdo -> prepare("INSERT INTO users (email,password) VALUES (:email,:password)");
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
$stmt->execute();
$_SESSION['id'] = $pdo->lastInsertId();


Если бы я вызывал метод lastInsertId() у $stmt, то не задался бы следующим вопросом:

lastInsertId() берет значение последнего id у объекта подключения к БД. Может ли
случится такая ситуация, что из за нагрузки или чего либо другого $pdo->lastInsertId()
вернет id следующего после регистрации пользователя, т.к. первому еще не успел взять
значение id а второй уже прошел регистрацию и записал данные в базу. И следовательно
в $pdo обновилось значение последнего id.
    


Ответы

Ответ 1



Вообще говоря не должно, lastInsertId() возвращает значение именно для последнего вставленного значения, для текущей сессии/соединения. Другие сессии/соединения никак не могу влиять на это значение. И ваш lastInsertId() не может попасть в параллельные сессии. Одновременно могут вставляться сотни строк, вы получите идентификатор именно вашего последнего INSERT-запроса.

Комментариев нет:

Отправить комментарий