php - 未捕获 PDO 异常

标签 php mysql pdo error-handling

我刚开始使用 PDO,我发现由于查询语句中的错误而导致的异常没有被正确捕获和显示。发生这种情况时的页面输出通常如下所示:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: ...

我使用以下函数进行 PDO 查询:

/**************************************************************************************************************
* Function: makeQuery                                                                                         *
* Desc: Makes a PDO query.                                                                                    *
* Pre conditions: The statement/query and an array of named parameters (may be empty) must be passed.         *
* Post conditions: The PDO query is executed. Exceptions are caught, displayed, and page execution stopped.   *
**************************************************************************************************************/
function makeQuery($stmt, $array, $errMsg = '')
{
    try 
    {
        $stmt->execute($array);
    }
    catch (PDOException $e) 
    {
        print $errMsg != ''?$errMsg:"Error!: " . $e->getMessage() . "<br/>";
        die();
    }
}

知道为什么没有捕获异常吗?

编辑:这就是我创建 PDO 对象的方式:

function createPDO()
{
    // MySQL connection details
    $dbhost = '';
    $dbuser = '';
    $dbpass = '';
    $dbname = '';

    try
    {
        $db = new PDO("mysql:$dbhost=localhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch (PDOException $e)
    {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }

    return $db;
}

最佳答案

您捕获异常的文件是否有可能使用 namespace ?在那种情况下应该是:

catch (\PDOException $e)

或添加:

use PDOException;

在文件的顶部

关于php - 未捕获 PDO 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403976/

相关文章:

php - 必应搜索 API 和 Azure

php - 从子模型 yii2 中的字段中删除 required

java - com.mysql.jdbc.PacketTooBigException :Packet too long to query

mysql - 将附加 SQL 触发器附加到现有触发器

mysql - 具有多个运算符的 SQL WHERE 命令

php - 如何使用 LIKE 语句创建 PDO 参数化查询?

php - 什么是 php 中的 session 和 cookie,它们存储在哪里?

php - PHP 和 QT 之间的共享内存

php - 如何统计查询结果中所有行出现的次数

php - 设置时区问题