我在我的 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/