Нужно ли оборачивать lastInsertId() в транзакцию?

Здравствуйте!
Допустим я вставляю запись и мне нужно получить ее ID, все просто:
$STM = $PDO->prepare('INSERT INTO bonuses (date,user_id) VALUES (?,?)');
$STM->execute([time(), 1]);
$id = $PDO->lastInsertId();

Могу ли я быть уверенным что lastInsertId не вызовет ошибку после того как запись добавится? Или нужно обернуть в транзакцию это?
Спасибо!

P.S.
Например insert выполнился, потом lastInsertId вызвал \PDOException и скрипт прекратил работу, пользователю говорим что ошибка, а на деле запись добавилась. В офф документации про ошибки у lastInsertId не говорится, я вот и не знаю, юзать ли везде транзакции для этого.
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 2
ravshanium
@ravshanium
аналитик, веб-программист
Думаю не желательно использование PDO::LastInsertId(), в особенности если используется постоянное соединение. У INSERT есть опция RETURNING - возвращает id добавленной записи, я думаю это лучшая альтернатива. и да вставка строки и получение ее идентификатора должны быть в одной транзакции.
php.net/manual/ru/pdo.lastinsertid.php#102614
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вообще по хорошему все должно быть завернуто в транзакцию (минимум одна транзакция на HTTP запрос).

Шансы что lastInsertId бросит исключение примерно равны нулю, но у вас же не один запрос обычно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы