web-dev-qa-db-fra.com

Définir PDO pour lever des exceptions par défaut

Je veux toujours que PDO lève des exceptions si une erreur se produit, car j'utilise toujours PDO comme ceci:

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.');
}

Ce serait bien s'il y avait un fichier de configuration que je pourrais éditer pour que PDO lève des exceptions par défaut - est-ce possible?

La raison pour laquelle je veux cela est que je n'ai pas à écrire cette ligne à chaque fois:

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

pdate - J'ai depuis créé une bibliothèque qui gère l'accès à la base de données pour moi (y compris la configuration de PDO pour lever des exceptions).

28
Alex Coplan

Vous pouvez ajouter la fonction setAttribute au constructeur:

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

Mais je ne trouve pas de méthode pour l'ajouter au fichier php.ini ou à un autre fichier de configuration.

42
Wouter J

En complément du commentaire de rdlowrey, la manière la plus simple serait:

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);
    }

}

l'invocation est alors simplement une question de

$dbh = new MyPDO("mysql:Host=$kdbhost;dbname=$kdbname",$kdbuser,$kdbpw);
25
Dan Soap