2012-01-02 17 views
0

Ofcourse我可能做錯了什麼,但我不明白爲什麼以及如何。在php中禁用mysql autocommit不起作用

我想在php腳本中禁用autocommit。這是因爲我的個人php mysql框架是這樣工作的。但不知何故自動提交不能關閉。我使用Mysqli和engine = InnoDB表,我嘗試了mysqli :: autocommit功能以及全局和會話的mysql語句。

所有結果都在相同的答案:autocommit仍然是。沒有錯誤說我使用了不正確的語句被返回。查詢返回true,嘗試提交,返回true。

有什麼我在這裏失蹤?自動提交已被關閉運行時,因爲它將上運行的主機不允許我在服務器設置:)

+0

在某些情況下爲我工作 - 您能分享任何代碼嗎?你如何設置/啓動交易?在運行命令之前,如何確保實際上處於事務中? – pagid 2012-01-02 23:55:58

+0

你有沒有嘗試過'開始交易;'查詢? – 2012-01-03 00:31:27

+0

好吧,目前我有自動提交,它表示自動提交值爲0.但即使如此,任何插入查詢以某種方式提交。我所做的就是關閉自動提交,運行插入查詢,然後運行一個保存點函數,它實際運行我的save($ commit = false)函數,它將執行插入操作,但不執行提交操作。奇怪的是,保存是唯一的函數使用mysqli_commit ... – 2012-01-03 08:54:56

回答

1

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來確定自動提交的當前狀態。

+0

那麼,autocommit關閉了,我意識到我很愚蠢並且沒有獲取查詢結果;)。但任何插入查詢正在提交,而我絕對是運行插入查詢,而不是mysqli_commit。我也嘗試了你的init_connect建議,但它不起作用! – 2012-01-03 08:52:59

0

感謝大家,我解決了我的問題!我以某種方式發現,當你沒有明確地進行回滾或關閉連接時,插入提交。通過register_shutdown_function可以進行回滾或關閉連接。

再次感謝您的幫助!

+0

不要忘記將你的答案設置爲已接受,或編輯我們的問題,並標記幫助你找到正確答案的人。 – Skuld 2012-01-24 15:54:38