2013-01-18 49 views
2

我在使用PHP中的PDO執行更新和插入數據庫時​​遇到問題。錯誤代碼表示成功,但預期的更改未反映在數據庫中。無法使用PHP/PDO在mySQL DB上更新/插入

這裏的地方設置我的連接:

$dsn = "mysql:host=".DB_HOST.";dbname=".DB_NAME; 
    $db = new PDO($dsn, DB_USER, DB_PASS); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE); 

我可以連接和選擇的事情就好了,但它不會更新或插入的。我嘗試過使用硬編碼的字符串,但即使這樣也行不通。這裏是代碼爲:

 $ins = "insert into choice_history (id_choice_history,choice_num,choice_taken) values (0, 10, 28);"; 
    if($stmt = $this->_db->prepare($ins)) 
    { 
     $status = $stmt->execute(); 
     return $errorcode = $stmt->errorCode(); 
    } 

我有一個類似的更新字符串,但他們都有相同的結果。

表的定義(它沒有限制):

mysql> describe choice_history; 
+-------------------+---------+------+-----+---------+----------------+ 
| Field    | Type | Null | Key | Default | Extra   | 
+-------------------+---------+------+-----+---------+----------------+ 
| id    | int(11) | NO | PRI | NULL | auto_increment | 
| id_choice_history | int(11) | NO |  | NULL |    | 
| choice_taken  | int(11) | YES |  | NULL |    | 
| choice_num  | int(11) | YES |  | NULL |    | 
+-------------------+---------+------+-----+---------+----------------+ 

此錯誤代碼是始終00000(成功)。我也試着用相同的字符串調用exec(),但沒有骰子。我可以將該查詢粘貼到我的服務器上的mysql,並且它執行得很好,但是從PDO沒有任何反應。

在這一點上,我不知所措。 PDO報告成功,但數據庫中沒有任何反應。我怎樣才能找出問題所在?

回答

2

您已關閉自動提交功能,因此您需要明確指定所有交易爲commit()

您的查詢成功(因此您看到的結果),它們只是從不承諾。

如果你不希望有明確的承諾每一個要求,你需要刪除這行代碼:

$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE); 
+0

嗯,這是一個愚蠢的監督。謝謝。 – CPS