jir*_*iya 5 php pdo transactions
我刚刚在我的一个应用程序上改进了一些代码,我最近使用PHP ADODB库转换为PDO.在adodb中,一旦启动了事务,如果在begin和commit命令之间出现任何异常,它就会自动回滚.
PDO也这样做吗?如果一个查询它的方法在PDO的开始和提交之间失败,那么trsaction会自动回滚还是需要隐式调用?
chr*_*guy 13
你必须自己调用rollback(并提交),PDO不会为你做.像这样的东西:
$pdo = new \PDO(/* ... */);
$pdo->beginTransaction();
try {
// do stuff..
} catch(\Throwable $e) { // use \Exception in PHP < 7.0
$pdo->rollBack();
throw $e;
}
$pdo->commit();
Run Code Online (Sandbox Code Playgroud)
当脚本结束或即将关闭连接时,如果您有未完成的事务,PDO将自动回滚.
因此,事务可能会根据您的应用程序回滚(也许您甚至会在某个地方找到一个会为您提交的地方?).在异常发生的地方附近进行显式回滚可能是个好主意.
vvz*_*vzh 13
来自http://www.php.net/manual/en/pdo.transactions.php:
当脚本结束或即将关闭连接时,如果您有未完成的事务,PDO将自动回滚....如果您没有明确提交事务,则会假定出现问题,因此会执行回滚以确保数据的安全性.
但是,如果出现错误,显式回滚事务是一种很好的做法.有关更多详细信息,请参阅此问题:如果PHP PDO事务失败,我是否必须明确地回滚()?