我在我的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块中,所以如果这产生了异常而不是致命错误,我就能够捕获它并优雅地终止应用程序。
答案 0 :(得分:3)
您可以强制PDO使用此
抛出异常$db = new PDO($dsn, $user, $pass, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
但我不认为这会对你的情况有所帮助,因为它与PDO
只与null
对象问题无关。
您尝试做的事情等同于此
$a = null;
$a->query();