【发布时间】:2012-10-01 05:44:26
【问题描述】:
我在我的 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 块中,所以如果这产生异常而不是致命错误,我将能够捕获它并优雅地终止应用程序。
【问题讨论】:
-
$this->db不是有效数据库对象的原因是什么?如果您使用它来获取此类中的数据,似乎应该保证这一点。为什么不先检查它,如果它不是一个有效的对象,抛出一个异常说没有数据库连接。