2

我在我的 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 块中,所以如果这产生异常而不是致命错误,我将能够捕获它并终止优雅地应用程序。

4

1 回答 1

3

您可以强制 PDO 抛出异常

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

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

你正在尝试做的是相当于这个

$a = null;
$a->query();
于 2012-10-10T17:14:22.837 回答