在运用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数据库事件碰到的题目处理的细致内容,更多请关注ki4网别的相干文章!