php – 使用try catch的PDO事务语法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用try catch的PDO事务语法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
使用PDO事务时尝试catch的原因是什么

$dbh->beginTransaction();
try {

} catch (Exception $e) {


}

要么

try {

$dbh->beginTransaction();

} catch (Exception $e) {

}

解决方法

现有的答案似乎表明,由于$dbh-> beginTransaction()可能抛出PDOException,它应该在实际事务代码的同一个try块中,但这意味着rollBack()代码本身是错误的,因为它可以在没有事务的情况下调用rollBack(),这也可能引发另一个PDOException.

正确的逻辑顺序是,在创建事务后,将要在一个事务中执行的代码放在一个catch块中.您还可以在继续之前检查beginTransaction()的返回是否为true.在调用rollback()之前,您甚至可以检查数据库会话是否在事务中.

if ($dbh->beginTransaction()) 
{
  try 
  {
    //your db code
    $dbh->commIT();
  } 
  catch (Exception $ex) 
  {
    if ($dbh->inTransaction())
    {
       $dbh->rollBack();
    }        
  }
}

请记住,至少在理论上,您仍然可以从beginTransaction()和rollBack()获取异常,因此我将其放在一个单独的函数中,并将调用括在另一个try-catch块中.

您还可以冒泡出现的异常来捕获它并将所有异常记录在一个地方.但请记住,一些异常可能是数据完整性错误,例如重复键或无效外键,这不会是数据库错误,但很可能是代码中的错误.

使用这种方法,这里要记住的主要事情是两个try-catch块的目的略有不同.内部的一个纯粹是为了确保在一个事务中以原子方式执行和提交多个查询,如果发生某些事情,它们将被回滚.外部try-catch是检测错误情况并记录它,或者如果你的数据库有问题你想做什么.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用try catch的PDO事务语法全部内容,希望文章能够帮你解决php – 使用try catch的PDO事务语法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。