被抓我在這頭一會兒....PDO :: ATTR_AUTOCOMMIT忽略非事務INSERT/UPDATE
我有一個pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
PDO對象,因爲我想用FOR UPDATE
一些InnoDB表。
- 你是在一個交易
- 你是不在事務和
set autocommit=0
已發出
所以,我:閱讀MySQL的文檔,如果FOR UPDATE
只鎖定讀取行使用ATTR_AUTOCOMMIT
來允許PDO對象鎖定行。無論哪種情況,都會導致INSERT和UPDATE語句不適用。這些語句與FOR UPDATE
無關,它們只是通過具有準備語句的相同PDO對象運行。
我的MySQL查詢日誌的樣子:
xxx Connect [email protected]
xxx Query set autocommit=0
xxx Query INSERT INTO foo_tbl (bar, baz) VALUES ('hello','world')
xxx Quit
PHP/PDO不抱怨,而是從表中選擇顯示的數據還沒有被寫入。
,我運行的查詢已運行數千之前的時間;只有ATTR_AUTOCOMMIT
已作出更改。刪除該選項會使所有操作重新開始。交易也可以使用autocommit=0
選項。
是否需要對PDO對象進行額外的調用(commit()
正確地抱怨它不在事務中)才能使更改保持不變?基本上,我想一個普通的PDO對象,但與鎖定InnoDB表交易外行選項(背景爲什麼過長而乏味這裏)。
我敢肯定,這是愚蠢的東西我失蹤劃痕頭
別擔心,我們有時會錯過的事情!我知道它發生在我身上更喜歡比我承認:-) – Josh 2010-11-04 21:52:54