设置PDO默认引发exception
我总是希望PDO在发生错误时抛出exception,因为我总是使用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.'); }
这将是很好,如果有一个configuration文件,我可以编辑,使PDO默认抛出exception – 这可能吗?
我想要这个的原因是我不必每次写这行:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
更新 – 我自从创build了一个为我处理数据库访问的库(包括设置PDO来抛出exception)。
您可以将setAttribute函数添加到构造函数中:
$pdo = new PDO('mysql:host=localhost;dbname=someTable', 'username', 'password', array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
但我找不到一种方法将其添加到php.ini文件或其他configuration文件。
扩展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);