我在这里做错了什么?我试图更新一列(金额),但是当我调用该函数时我什么都没得到 - 没有错误,什么都没有。
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();
}
答案 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将抛出异常,而不是默默地忽略错误。