如果和PHP PDO事务失败,我必须显式回滚()吗?

时间:2010-01-04 19:44:42

标签: php mysql pdo

我见过一个代码示例,其中有人做了

$dbh->rollback();

发生PDOException时。我认为在这种情况下数据库会自动回滚吗?

1 个答案:

答案 0 :(得分:12)

如果您没有commit没有rollback已打开的交易,而且您的脚本中的任何地方都不是commited,那么它将不是commited (正如数据库引擎所见),并将在脚本结束时自动回滚。


不过,我(好吧,差不多)总是commitrollback明确我打开的交易,所以:

  • 不存在错误的风险(如在脚本后面“错误地”提交)
  • 代码更易于阅读/理解:当人们看到$db->rollback()时,他知道我希望事务回滚肯定,而且他不必考虑“ 他真的想要回滚,还是忘记了什么?后来在剧本中怎么办?


数据库引擎没有“看到”PDOException:PHP在各种条件下抛出它 - 但数据库本身不会回滚任何东西:

  • 提交交易
  • 或者它已经回滚
  • 或者它没有明确提交或回滚 - 这意味着它没有被提交 - 这意味着被修改的内容并未“真正”修改