web-dev-qa-db-ja.com

デフォルトで例外をスローするようにPDOを設定する

私は常に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);

pdate-その後、データベースアクセスを処理するライブラリを作成しました(例外をスローするようにPDOを設定することを含む)。

28
Alex Coplan

SetAttribute関数をコンストラクターに追加できます。

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

しかし、php.iniファイルやその他の設定ファイルに追加する方法が見つかりません。

42
Wouter J

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);
25
Dan Soap