PDO
PHP Manual

Les erreurs et leur gestion

PDO vous offre 3 façons différentes de gérer les erreurs afin de mieux s'adapter à votre application.

PDO utilise les codes erreurs SQL-92 SQLSTATE ; chaque driver PDO est responsable de lier leurs codes natifs aux codes SQLSTATE appropriés. La méthode PDO::errorCode() retourne un code SQLSTATE unique. Si vous avez besoin d'informations spécifiques sur l'erreur, PDO vous propose également la méthode PDO::errorInfo() qui retourne un tableau contenant le code SQLSTATE, le code d'erreur spécifique du driver et la chaîne décrivant l'erreur provenant du driver.

Exemple #1 Création d'une instance PDO et définition du mode d'erreur

<?php
$dsn 
'mysql:dbname=testdb;host=127.0.0.1';
$user 'dbuser';
$password 'dbpass';

try {
    
$dbh = new PDO($dsn$user$password);
    
$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
} catch (
PDOException $e) {
    echo 
'Échec lors de la connexion : ' $e->getMessage();
}

?>

Note:

PDO::__construct() va toujours lancer une exception PDOException si la connexion échoue suivant la configuration de PDO::ATTR_ERRMODE. Les exceptions non attrappées deviennent des erreurs fatales.

Exemple #2 Crée une instance PDO et définit le mode d'erreur depuis le constructeur

<?php
$dsn 
'mysql:dbname=test;host=127.0.0.1';
$user 'googleguy';
$password 'googleguy';

/*
    L'utilisation des blocs try/catch autour du constructeur est toujours valide
    même si nous définissons le ERRMODE à WARNING sachant que PDO::__construct
    va toujours lancer une exception PDOException si la connexion échoue.
*/
try {
    
$dbh = new PDO($dsn$user$password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (
PDOException $e) {
    echo 
'Echec de la connexion : ' $e->getMessage();
    exit;
}

// Ceci fera que PDO lancera une erreur de niveau E_WARNING au lieu d'une exception (lorsque la table n'existe pas)
$dbh->query("SELECT wrongcolumn FROM wrongtable");
?>

L'exemple ci-dessus va afficher :

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in
/tmp/pdo_test.php on line 18


PDO
PHP Manual