在php中禁用mysql autocommit不起作用

时间:2012-01-02 23:51:37

标签: php mysql autocommit

当然,我可能做错了什么,但我真的不明白为什么以及如何做。

我想在php脚本中禁用自动提交。这是因为我个人的php mysql框架就是这样的。但不知何故,autocommit无法关闭。我正在使用Mysqli和engine = InnoDB表,我尝试了mysqli :: autocommit功能以及全局和会话的mysql语句。

一切都会得到相同的答案:自动提交仍然存在。没有错误说我使用了错误的语句被返回。查询返回true,尝试提交,返回true。

这里有什么我想念的吗? autocommit必须关闭运行时,因为它将运行的主机不允许我在服务器设置中禁用它:)

2 个答案:

答案 0 :(得分:2)

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_autocommit

默认情况下,客户端连接以autocommit设置为1开始。要使客户端以默认值0开始,请设置服务器的init_connect系统变量:

SET GLOBAL init_connect='SET autocommit=0';

init_connect变量也可以在命令行或选项文件中设置。要使用选项文件将变量设置为刚显示,请包含以下行:

[mysqld]
init_connect='SET autocommit=0'

同时查看以下link,有一种方法可以返回一个布尔值,它将指示提交是否已成功打开/关闭。

还可以使用@@autocommit来确定自动提交的当前状态。

答案 1 :(得分:0)

感谢大家,我已经解决了我的问题!我以某种方式弄清楚,当您没有明确地执行回滚或关闭连接时,将提交插入。使用register_shutdown_function,您可以执行回滚或关闭连接。

再次,谢谢你的帮助!