如何解决php数据库事务遇到的问题

  介绍

这篇文章主要介绍如何解决php数据库事务遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在使用php的PDO扩展的时候发现的一个问题,在事务开启之后,如果php与mysql之间的连接断开了,会导致php直接记录一个警告的异常,而不是直接抛出一个异常

流程如下:

/* *   *一个用户财产变更的场景下   */尝试{//1。开启事务/* *   * 2。变更用户财产,增加财产变更的流水记录   *///3。提交事务   }捕获异常(\ $ e) {//4。回滚事务//5。记错误日志//6。抛出异常   }//7。发布用户财产变更的广播

以上的操作可以简单的分成五类,在以前我的认知当中,操作事务的大致流程就是上面的样子,没有异常抛出则事务就是提交成功了的
但是直到有一天数据库异常,有一个事务已经开启了,处在上面的1 - 2的过程当中,数据库直接挂掉,那么在步骤3提交事务的时候会直接出现一个<代码> 级警告别的错误,<代码>“SQLSTATE [HY000]:一般错误:2006 MySQL服务器已经away">,所以在步骤7的后续步骤中,其他业务方拿到了那条没有提交的流水id并进行了统计,但是实际上用户的财产并没有增加。从而导致了问题

百思不得其解的时候去看了下文档,发现了一个历史遗留很久的错误:https://bugs.php.net/bug.php?..。

后来我们通过临时在事务的位置配置了<代码> set_error_handler>

如何解决php数据库事务遇到的问题