Если транзакция PHP PDO не удалась, я должен откатить () явно? - PullRequest
6 голосов
/ 04 января 2010

Я видел пример кода, где кто-то делает

$dbh->rollback();

когда возникает исключение PDOException. Я думал, что база данных будет автоматически откат в таком случае?

1 Ответ

12 голосов
/ 04 января 2010

Если вы не commit не rollback открыли транзакцию, и она не commited нигде позже в вашем скрипте, она не будет commited (как видно ядром базы данных) , и автоматически откатится в конце вашего скрипта.


Тем не менее, я (ну, почти) всегда commit или rollback явно транзакции, которые я открываю, так что:

  • Нет риска ошибки (как, например, коммит "по ошибке" позже в скрипте)
  • Код легче читать / понимать : когда кто-то видит $db->rollback(), он знает, что я точно хочу откат транзакции, и ему не нужно думать " он действительно хотел откатиться, или он что-то забыл? и что позже в сценарии?"


Механизм БД не «видит» исключение PDOException: он генерируется PHP при различных условиях - но база данных сама по себе ничего не откатывает:

  • либо транзакция совершена
  • или откат
  • или это явно не зафиксировано и не отменено - что означает, что оно не зафиксировано - что означает, что то, что было изменено, не «действительно» изменено
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...