无法使用PDO更新列

时间:2014-10-26 17:42:03

标签: php mysql 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();           
 }

2 个答案:

答案 0 :(得分: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())。

答案 1 :(得分:0)

问:我在这里做错了什么? ......当我调用函数时,我什么都没得到 - 没有错误,什么都没有。

答:您的代码忽略来自MySQL的错误消息。 MySQL正在抛出一个错误,你的代码忽略了它。除了语句中的语法错误之外,还可能发生各种其他错误。修复语法错误后,您的代码将“吞下”发生的任何其他错误。

如果您不打算包含检查PDO方法返回的代码,您可以让PDO自动执行检查,并在发生错误时抛出异常。

(我们没有在您的代码中看到connect()函数的定义,但根据您发布的代码,我们会执行以下操作:

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

然后,当发生MySQL语法错误或运行SQL语句时发生任何其他MySQL错误时,PDO将抛出异常,而不是默默地忽略错误。