教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 php数据库事务遇到的问题解决

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

发布时间:2021-01-10   编辑:jiaochengji.com
教程集为您提供php数据库事务遇到的问题解决等资源,欢迎您收藏本站,我们将为您提供最新的php数据库事务遇到的问题解决资源
本篇文章给大家带来的内容是关于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解决了问题

以上就是php数据库事务遇到的问题解决的详细内容,更多请关注教程集其它相关文章!

  • 本文转载于:segmentfault,如有侵犯,请联系jquerycn@qq.com删除
  • 您可能感兴趣的文章:
    php数据库事务遇到的问题解决
    php500错误
    php开发会遇到什么问题
    PHP连接数据库失败的原因是什么?
    phpMyAdmin无法载入 mysqli 扩展,请检查 PHP 配置的解决方法
    JDBC事务级别,请大家多了解了解
    解决PHP提交MYSQL数据库中文内容乱码方法
    php与mysql遇到乱码时的一般解决思路
    PHP站点提示“/var/lib/mysql/mysql.sock”不存在的解决方法
    mysql服务无法启动报错误1067的解决方法

    [关闭]
    ~ ~