2014-10-26 81 views
-3

我在這裏做錯了什麼?我試圖更新一列(金額),但是當我調用函數時我什麼也得不到 - 沒有錯誤,什麼都沒有。無法使用PDO更新列

function deposit($accountno, $newAmount) 
{ 
    $sql = "UPDATE client SET amount = amount + :newAmount WHERE accountNo = :accountNo LIMIT 1)"; 

    $stm = connect()->prepare($sql);  
    $stm->bindParam(':accountNo', $accountno, PDO::PARAM_STR); 
    $stm->bindParam(':newAmount', $newAmount, PDO::PARAM_STR); 
    $stm->execute();   
} 
+1

也許你應該啓用錯誤報告... – 2014-10-26 17:44:43

+2

在查詢結束時刪除括號''''。 – 2014-10-26 17:48:28

+0

多麼尷尬:)謝謝。 – kaneo 2014-10-26 18:00:25

回答

0

在查詢字符串的末尾還有一個額外的)。更改

$sql = "UPDATE client SET amount = amount + :newAmount WHERE accountNo = :accountNo LIMIT 1)"; 
                          ^^^ 

$sql = "UPDATE client SET amount = amount + :newAmount WHERE accountNo = :accountNo LIMIT 1"; 

同時建議您添加錯誤報告($stm->errorInfo())。

+0

看不到括號,謝謝。 – kaneo 2014-10-26 18:01:07

0

問:我在這裏做錯了什麼? ......當我調用函數時,我什麼也得不到 - 沒有錯誤,什麼都沒有。

- 答:您的代碼是忽略來自MySQL的錯誤消息。 MySQL正在拋出一個錯誤,你的代碼忽略了它。除了語句中的語法錯誤之外,還可能發生各種其他錯誤。修復語法錯誤後,代碼將「吞下」發生的任何其他錯誤。

如果您不打算包含檢查PDO方法返回的代碼,您可以讓PDO自動執行檢查,並在發生錯誤時引發異常。

(我們沒有看到在你的代碼的connect()函數的定義,但根據您發佈的代碼,我們會做這樣的事:

$dbh = connect(); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stm = $dbh->prepare("..."); 

然後,當出現一個MySQL語法錯誤,或者在運行SQL語句時發生任何其他MySQL錯誤,PDO將拋出異常,而不是默默地忽略該錯誤。

+1

現在有效,出現語法錯誤。謝謝你的建議 – kaneo 2014-10-26 18:13:10