Quand une instruction PDO échoue, aucun message n'est affiché. On peut alors croire à tort que tout s'est bien passé. Il est donc important de savoir obtenir des informations sur d'éventuelles erreurs. Pour avoir des informations plus précises que ces quelques lignes, allez voir les pages dont elles sont extraites sur PHP.net.
Pour la suite nous continuerons à nous placer dans le cas où on a auparavant obtenu un identifiant de connexion $dbh (instance de la classe de base de PDO).
La méthode $db->errorCode() renvoie le code d'erreur associé avec la dernière opération effectuée sur la base de données. Sa valeur est 0 (zéro) si il n'y a pas eu d'erreur.
La méthode $db->errorInfo() renvoie les informations associées à l'erreur survenue lors de la dernière opération sur la base de données. Il s'agit d'un tableau qui contient les champs décrit Tableau 10.1, « Champs de $db->errorInfo() ».
Tableau 10.1. Champs de $db->errorInfo()
| Élément | Information |
|---|---|
| 0 | Code erreur SQLSTATE (un identifiant alphanumérique de cinq caractères défini dans le standard ANSI SQL). |
| 1 | Code erreur spécifique au driver. |
| 2 | Message d'erreur spécifique au driver. |
Si le code erreur SQLSTATE n'est pas défini ou s'il n'y a pas d'erreur spécifique du driver, l'élément suivant l'élément 0 sera défini à NULL.
Pour gérer les éventuelles erreurs, les méthodes précédentes peuvent être utilisée de cette façon (ici on exécute une requête $req définie par ailleurs) :
$db->query($req); // exécution de la reqête
if ($db->errorCode()!=0) { // il y a une erreur
echo "<b>Erreur</b> sur la requête <tt>$req</tt><br />\n";
$t=$db->errorInfo(); // récupération des informations sur l'erreur
echo "<b>Code erreur SQLSTATE :</b> ".$t[0]."<br />\n";
echo "<b>Code erreur spécifique au driver :</b> ".$t[1]."<br />\n";
echo "<b>Message d'erreur :</b><blockquote><p>".$t[2]."</p></blockquote>\n";
echo "<b>Le programme a été interrompu</b>";
die();
}