33

如果发生错误,我总是希望 PDO 抛出异常,因为我总是像这样使用 PDO:

try {
    $dbh = new PDO("mysql:host=$kdbhost;dbname=$kdbname",$kdbuser,$kdbpw);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // some queries
}
catch (PDOException $e) {
    error_log('PDO Exception: '.$e->getMessage());
    die('PDO says no.');
}

如果有一个配置文件我可以编辑以使其默认情况下 PDO 抛出异常,那就太好了 - 这可能吗?

我想要这个的原因是我不必每次都写这一行:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

更新- 我已经创建了一个库来为我处理数据库访问(包括设置 PDO 以引发异常)。

4

2 回答 2

53

您可以将 setAttribute 函数添加到构造函数中:

$pdo = new PDO('mysql:host=localhost;dbname=someDatabase', 'username', 'password', array(
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

但我找不到将其添加到 php.ini 文件或其他配置文件的方法。

于 2012-01-24T19:35:09.010 回答
27

作为 rdlowrey 评论的扩展,最简单的方法是:

class MyPDO extends PDO {

    public function __construct($dsn, $username = null, $password = null, array $driver_options = null) {
         parent :: __construct($dsn, $username, $password, $driver_options);
         $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

}

那么调用只是一个问题

$dbh = new MyPDO("mysql:host=$kdbhost;dbname=$kdbname",$kdbuser,$kdbpw);
于 2012-02-17T12:56:28.497 回答