php数据库事务遇到的问题解决
发布:smiling 来源: PHP粉丝网 添加日期:2020-02-15 16:55:34 浏览: 评论:0
本篇文章给大家带来的内容是关于php数据库事务遇到的问题解决,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在使用php的PDO扩展的时候发现的一个问题,在事务开启之后,如果php与mysql之间的连接断开了,会导致php直接记录一个warning的异常,而不是直接抛出一个Exception
流程如下:
- /**
- * 一个用户财产变更的场景下
- */
- try {
- // 1. 开启事务
- /**
- * 2. 变更用户财产,增加财产变更的流水记录
- */
- // 3. 提交事务
- } catch (\Exception $e) {
- // 4. 回滚事务
- // 5. 记错误日志
- // 6. 抛出异常
- }
- // 7. 发布用户财产变更的广播
以上的操作可以简单的分成五类,在以前我的认知当中,操作事务的大致流程就是上面的样子,没有异常抛出则事务就是提交成功了的。
但是直到有一天数据库异常,有一个事务已经开启了,处在上面的1-2的过程当中,数据库直接挂掉,那么在步骤3提交事务的时候会直接出现一个warning级别的错误,"SQLSTATE[HY000]: General error: 2006 MySQL server has gone away" ,没有捕获到异常。
所以在步骤7的后续步骤中,其他业务方拿到了那条没有提交的流水id并进行了统计,但是实际上用户的财产并没有增加。从而导致了问题
百思不得其解的时候去看了下文档,发现了一个历史遗留很久的bug:https://bugs.php.net/bug.php?...
后来我们通过临时在事务的位置配置了set_error_handler解决了问题
Tags: php数据库事务
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)