gpt4 book ai didi

php - PDO::commit() 成功或失败

转载 作者:可可西里 更新时间:2023-11-01 06:36:42 25 4
gpt4 key购买 nike

PHP PDO::commit()文档指出该方法在成功时返回 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,而不是 PDOException,因为中止执行的特定异常并不重要
  • 您在回滚后重新抛出异常,以便收到问题通知
  • 还有一个表引擎支持事务(即对于 Mysql,它应该是 InnoDB,而不是 MyISAM)。

此 list 摘自 my article您可能会发现它在这方面或许多其他方面也很有用。

关于php - PDO::commit() 成功或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com