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::ERRMODE_SILENT
Antérieur à PHP 8.0.0, c'est le mode par défaut.
PDO définit simplement le code d'erreur à inspecter
grâce aux méthodes PDO::errorCode et
PDO::errorInfo sur les objets représentant
les requêtes, mais aussi ceux représentant les bases de données ; si l'erreur
résulte d'un appel à l'objet représentant la requête, vous pouvez appeler
la méthode PDOStatement::errorCode ou la méthode
PDOStatement::errorInfo sur l'objet.
Si l'erreur résulte d'un appel sur l'objet représentant une base de données,
vous pouvez également appeler ces deux mêmes méthodes sur l'objet.
PDO::ERRMODE_WARNING
En plus de définir le code d'erreur, PDO émettra un message E_WARNING
traditionnel. Cette configuration est utile lors des tests et du débogage,
si vous voulez voir le problème sans interrompre l'application.
PDO::ERRMODE_EXCEPTION
À partir de PHP 8.0.0, c'est le mode par défaut.
En plus de définir le code d'erreur, PDO lancera une exception
PDOException et y définit les propriétés
afin de représenter le code d'erreur et les informations complémentaires.
Cette configuration est également utile lors du débogage, car elle
va « contourner » le point critique de votre code, vous montrer
rapidement le problème rencontré (souvenez-vous : les transactions
sont automatiquement annulées si l'exception fait que votre script
se termine).
Le mode "exception" est également très utile car ainsi, vous pouvez
structurer votre gestionnaire d'erreur plus clairement qu'avec
les alertes traditionnelles PHP et, ce, avec moins de code que
lorsque vous exécutez votre code en mode silence, et que vous
vérifiez systématiquement les valeurs retournées après chaque appel
à la base de données.
Voir le chapitre sur les exceptions
pour plus d'informations sur les exceptions en PHP.
PDO utilise les codes erreurs SQL-92 SQLSTATE ; chaque pilote PDO est
responsable de lier ses 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 pilote et la chaîne décrivant l'erreur provenant du pilote.
Création d'une instance PDO et
définition du mode d'erreur
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Échec lors de la connexion : ' . $e->getMessage();
}
?>
]]>
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.
Crée une instance PDO et définit le mode d'erreur depuis le constructeur
PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
echo 'Échec 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");
?>
]]>
&example.outputs;