【问题标题】:Troubleshooting PDO: Error not caught when executing prepared statement [duplicate]PDO 故障排除:执行准备好的语句时未捕获错误[重复]
【发布时间】:2009-03-27 17:55:57
【问题描述】:

我在使用 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 显示或捕获此类数据库错误?

【问题讨论】:

    标签: php mysql pdo try-catch


    【解决方案1】:

    PDO::errorInfo()PDOStatement-&gt;errorInfo()

    至于例外情况,请查看"Errors and error handling" in PDO 的文档。默认情况下不会抛出异常,这就是您可能想要启用它们的原因。

    参见:

    【讨论】:

    • 谢谢,这准确地告诉了我我需要知道的内容。还有一个问题,为什么没有发现错误?
    • 你说它返回 false,这意味着它被抓住了 ;-)
    • Ummmmmmmm,如果它没有显示消息,那么有一个 catch 语句有什么意义呢?我认为这样做的全部目的是摆脱这些 if (success) else 组合......
    • 还是 (PDOException $e) 错了?我一定是抓错了,但我正在学习:)
    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多