代码之家  ›  专栏  ›  技术社区  ›  jeroen

PDO疑难解答:执行准备语句时未捕获错误

  •  3
  • jeroen  · 技术社区  · 15 年前

    我在使用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
  •  11
  •   Your Common Sense    4 年前

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

    对于例外情况,请检查文档中的 "Errors and error handling" in PDO . 默认情况下不会引发异常,这就是您可能希望启用它们的原因。