PDO故障排除:执行预处理语句时未捕获错误

4

我在使用PDO时遇到了一个问题,因为没有捕获错误。

代码很简单,运行良好,这里提供一个示例以避免混淆:

$sql = 'INSERT INTO somedatetable (something) 
        VALUES (:something) 
        ON DUPLICATE KEY UPDATE something=:something';

$values = array(":something" => $something);

try {
    $stmt = $dbh->prepare($sql);    
    $stmt->execute($values);    
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage() . "<br />\n";
}

代码运行良好,但在开发一个新模块时,我遇到了一个问题,即没有记录被添加或修改,并且也没有捕获到任何错误。$stmt返回false,但我不知道为什么或如何找到错误。
最后解决方案很简单,我使用的是一个有限制的MySQL用户,该用户没有写入表的权限。当使用MySQL时,这些错误总是立即显示,但使用PDO我不知道如何处理它们。
该如何让PHP / PDO显示或捕获这种类型的数据库错误?
1个回答

11

1
谢谢,这正是我需要知道的。不过还有一个问题,为什么错误没有被捕获? - jeroen
你说它返回了false,这意味着它被捕获了;-) - Ryan Graham
那么,如果catch语句不显示消息,它的意义是什么呢?我认为这样做的整个目的就是为了消除if(success)else组合... - jeroen
还是 (PDOException $e) 错误的吗?可能我捕获了错误的东西,但我正在学习 :) - jeroen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接