PDO 故障排除:执行准备好的语句时未捕获错误

发布于 2024-07-15 08:35:29 字数 709 浏览 8 评论 0原文

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

I have run into a problem using PDO because an error was not caught.

The code is simple and works just fine, I'll just include a sample to avoid confusion:

$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";
}

The code works fine, however when working on a new module, I ran into a problem that no records were added or modified and no error was caught.

$stmt returned false but I did not have a clue why or how to find the error.

The solution was simple in the end, I was using a limited MySQL user that did not have write permissions to the table. These errors always displayed right away when using mysql, but using PDO I do not know how to get to them.

How do I get PHP / PDO to display or catch these kind of database errors?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪意 2024-07-22 08:35:29

PDO::errorInfo()PDOStatement->errorInfo()

至于例外情况,请检查文档中的 PDO 中的“错误和错误处理”。 默认情况下不会引发异常,这就是您可能想要启用它们的原因。

另请参阅:

PDO::errorInfo() or PDOStatement->errorInfo()

As for exceptions, check the docs for "Errors and error handling" in PDO. Exceptions aren't thrown by default, which is why you might want to enable them.

See as well:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文