2013-02-08 75 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。

相關問題