捕获PDO致命错误并抛出异常

时间:2012-10-10 17:04:20

标签: 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不是有效的数据库对象,我会得到这个致命的错误:

  

在非对象

上调用成员函数query()

这是可以预料到的,但是为了让我的最终用户更容易,我不想让它们将方法包装在try-catch块中或进行任何错误检查,我想知道我怎么能抓住它致命错误并抛出异常(整个应用程序使用异常)。

是否存在某种PDO选项,使其仅在这些情况下抛出异常?

编辑:重新阅读,我应该补充一点,我有很多代码包含在继承树中的try-catch块中,所以如果这产生了异常而不是致命错误,我就能够捕获它并优雅地终止应用程序。

1 个答案:

答案 0 :(得分:3)

您可以强制PDO使用此

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

但我不认为这会对你的情况有所帮助,因为它与PDO只与null对象问题无关。

您尝试做的事情等同于此

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