在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?
PHPz
PHPz 2017-04-11 09:48:59
[PHP讨论组]

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

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

PHPz
PHPz

学习是最好的投资!

全部回复(1)
天蓬老师

这里我默认认为你使用的是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)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号