2014-10-26 50 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