2013-02-08 126 views
2

我在php中使用mysql扩展,我知道它从PHP 5.5.0开始已被弃用,但我已经使用这个扩展编写了大量代码。 在我看来,像mysql_query提交查询,如果是这意味着它被设置为自动运行,如何设置,因此它不会自动提交。是否mysql_query提交了所有内容

+0

如果你使用MySQLi,你可以做MySQLi :: autocommit。如果您使用PDO,则可以执行PDO :: beginTransaction。没有人希望帮助保持mysql_ *活着。 – 2013-02-08 22:25:17

+1

我不相信使用mysql_ *方法是可能的,你至少需要升级到mysqli。这可以用最少的努力完成,因为它具有类似于mysql的过程式操作。 – 2013-02-08 22:28:17

+0

是的,看到你可以添加我,所以我会用mysqli – 2013-02-08 22:29:36

回答

5

旧的mysql扩展没有专门用于事务控制的功能,但您可以发出SQL语句来执行您想要的操作。

可以隐含关闭自动提交了一个事务期间,只需启动一个交易:只要你COMMIT或ROLLBACK

mysql_query("START TRANSACTION"); 

,自动提交模式将返回到默认设置。

mysql_query("COMMIT"); // or ROLLBACK 

你可以通过设置一个会话变量关闭自动为您的整个会话:

mysql_query("SET autocommit=0"); 

或全局改变它在你的MySQL实例,以便它改变了所有会话的默认:

mysql_query("SET GLOBAL autocommit=0"); 

或者通过编辑/etc/my.cnf来设置它改变MySQL服务启动时的全局设置:

[mysqld] 
autocommit=0 

如果你使用MySQL 5.1中,你必须这样做略有不同:

[mysqld] 
init_connect='SET autocommit=0' 

您可能已经知道,但它值得重复的,如果你正在使用InnoDB表的事务只能意味着什么。 MyISAM表不支持事务处理,因此无论您的设置如何,它们总是自动提交。与其他几种存储引擎相同,包括MEMORY和CSV。

相关问题