在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?

查看:953
本文介绍了在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

网上有人说开启事务后 sql语句执行错误或程序出错 没有执行rollback的情况下,下一次运行就会自动commit
程序出错不会回滚rollback

但是也有人说抛出异常等 程序如果MySQL存在没有提交的事务,那么这时候 AUTOCOMMIT 自动提交的参数应该是为 0 的。
不过如果你通过其他的语言的MySQL驱动来操作的话,这些驱动一般都带有自动恢复 AUTOCOMMIT 的功能,在请求处理完成后会自动 ROLLBACK 没有处理的事务。

解决方案

这里我默认认为你使用的是PDO吧。
官方文档是这样说的:

When the script ends or when a connection is about to be closed, if you have an outstanding transaction, PDO will automatically roll it back. This is a safety measure to help avoid inconsistency in the cases where the script terminates unexpectedly--if you didn't explicitly commit the transaction, then it is assumed that something went awry, so the rollback is performed for the safety of your data.
When the script ends or when a connection is about to be closed

意思就是说,当脚本结束(包括正常结束或者异常结束).

PDO will automatically roll it back

PDO会自动回滚。
文档已经说的很清楚了。
如果你不是用的PDO驱动,可查看相关驱动文档,或者在问题中说清楚用的什么驱动。

顺便一提,之前的mysql_connect()函数官方已经不建议再使用了(was deprecated)。

这篇关于在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆