Ale*_*lan 27 php mysql pdo php-ini
如果发生错误,我总是希望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.');
}
Run Code Online (Sandbox Code Playgroud)
如果有一个我可以编辑的配置文件就可以了,那么默认情况下PDO会抛出异常 - 这可能吗?
我想要这个的原因是我每次都不必写这行:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)
更新 - 我已经创建了一个库来处理数据库访问(包括设置PDO以引发异常).
Wou*_*r J 43
您可以将setAttribute函数添加到构造函数:
$pdo = new PDO('mysql:host=localhost;dbname=someTable', 'username', 'password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
Run Code Online (Sandbox Code Playgroud)
但我找不到将其添加到php.ini文件或其他配置文件的方法.
Dan*_*oap 25
在对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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用只是一个问题
$dbh = new MyPDO("mysql:host=$kdbhost;dbname=$kdbname",$kdbuser,$kdbpw);
Run Code Online (Sandbox Code Playgroud)