The PHP PDO::提交() http://www.php.net/manual/en/pdo.commit.php文档指出该方法成功时返回 TRUE,失败时返回 FALSE。这是指beginTransaction()和commit()之间的语句执行成功还是失败?
例如,从文档中:
$dbh->beginTransaction();
$sql = 'INSERT INTO fruit (name, colour, calories) VALUES (?, ?, ?)';
$sth = $dbh->prepare($sql);
foreach ($fruits as $fruit) {
$sth->execute([
$fruit->name,
$fruit->colour,
$fruit->calories,
]);
}
$dbh->commit();
如果上述任何一个执行失败,commit() 方法是否会因为原子事务的“全有或全无”原则而返回 false?
关键部分是将 PDO 设置为异常模式,而仅用 try-catch 进行回滚是不必要的。因此,您的代码没问题,如果您想要的只是失败时回滚,则无需更改它,只要您在某处有此行即可:
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
如果出现故障,脚本将被终止,连接将关闭,并且 mysql 将很乐意为您回滚事务。
如果您仍然想手动回滚,您应该正确执行,而不是像其他答案中所说的那样。确保
- 你正在抓住
Exception
, not PDOException
,因为什么特定异常中止执行并不重要
- you are 重新投掷回滚后出现异常,要通知问题
- 另外,表引擎支持事务(即对于 Mysql,它应该是 InnoDB,而不是 MyISAM)。
该清单取自我的文章 https://phpdelusions.net/pdo#transactions您可能会发现它在这个或许多其他方面也很有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)