Если транзакция PHP PDO перестала работать, я должен откатывать () explicitely?

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

$dbh->rollback();

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

6
задан openfrog 4 January 2010 в 19:44
поделиться

1 ответ

Если вы не зафиксируете не откат открытой транзакции, и это не скоммитировано нигде в дальнейшем в вашем скрипте, это не будет скоммитировано (как видно из движка базы данных) , и будет автоматически откат назад в конце вашего скрипта.


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

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


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

  • либо транзакция скоммитирована
  • , либо откат
  • , либо явно не скоммитирована и не откат -- что означает, что она не скоммитирована -- что означает, что то, что было модифицировано, не "действительно" модифицировано
12
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: