php - 捕获 PDO fatal error 并抛出异常

标签 php mysql exception pdo

我在我的 PHP 应用程序中使用 PDO MySQL 驱动程序,并且在我的一个模型中我有这个:

public function getAllUsers() {
    $this->st = $this->db->query('SELECT name FROM users');
    $this->st->setFetchMode(PDO::FETCH_OBJ);
    $users = array();
    while($row = $this->st->fetch()) {
        array_push($users, $row->name);
    }

    return $users;
}

$this->db是从父类继承的数据库句柄。问题是,如果出于某种原因 $this->db不是有效的数据库对象我收到此 fatal error :

Call to a member function query() on a non-object

这是预料之中的,但为了让我的最终用户更容易,我不想让他们将方法包装在 try-catch block 中或进行任何错误检查,我想知道如何捕获它 fatal error 并抛出异常(整个应用程序使用异常)。

是否有某种 PDO 选项使其仅在此类情况下抛出异常?

编辑:重新阅读,我应该补充一点,我有很多代码包装在继承树中更靠前的 try-catch block 中,所以如果这产生了异常而不是 fatal error ,我将能够捕获它并优雅地终止应用程序。

最佳答案

您可以强制 PDO 抛出异常

$db = new PDO($dsn, $user, $pass, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);

但我认为这对您的情况没有帮助,因为它与 PDO 无关,它只是 null 对象问题。

你想做的与此相同

$a = null;
$a->query();

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

相关文章:

php - 如何显示包含某些数据的字段的 mysql 查询结果?

java - Class.forName() 和 ClassNotFoundException

c++ - 来自核心转储的异常回溯

java - Swing 号码格式异常

php - 评估存储在数组中的 PHP 逻辑

php - 限制文件可以下载的次数

php - 在 Windows 7 中创建的 .htaccess 文件,但在 Ubuntu 12.10 中不起作用

PHP + MySQL部署

PHP 内部联接使用 PDO 验证多个用户(如果已存在)

MySQL:从具有特定关联的关联表中获取 id