Erreurs et exceptions avec PDO
Objectifs pédagogiques
- Comprendre le comportement par défaut de PDO en cas d'erreur.
- Savoir activer la gestion des exceptions.
- Apprendre à capturer et gérer les erreurs avec
try/catch. - Diagnostiquer les erreurs à l'aide des méthodes PDO.
Comportement par défaut
Par défaut, PDO ne déclenche pas d'exception lorsqu'une requête échoue. Au lieu de cela, il retourne false.
php
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$result = $pdo->query("SELECT * FROM table_inexistante");
if ($result === false) {
echo "Erreur détectée";
}Cela oblige à vérifier manuellement chaque requête, ce qui peut être source d’erreurs oubliées.
Activer les exceptions PDO
Pour rendre le comportement plus fiable, on active les exceptions via un attribut de configuration :
php
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);Cela permet de capturer toutes les erreurs avec un bloc try/catch.
Exemple avec gestion d’exception
php
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->query("SELECT * FROM table_inexistante");
} catch (PDOException $e) {
echo "Erreur PDO : " . $e->getMessage();
}Autres modes d'erreur PDO
| Mode | Description |
|---|---|
PDO::ERRMODE_SILENT | (par défaut) Retourne false en cas d'erreur |
PDO::ERRMODE_WARNING | Déclenche un E_WARNING |
PDO::ERRMODE_EXCEPTION | Lève une exception PDOException |
Accéder à des informations détaillées
Pour comprendre ce qui a échoué, on peut inspecter :
php
<?php
$errorInfo = $statement->errorInfo();
print_r($errorInfo);Cela retourne un tableau avec :
- Le code SQLSTATE
- Le code d’erreur du driver
- Le message d’erreur
Conclusion
- Toujours activer
PDO::ERRMODE_EXCEPTIONdans vos projets. - Utiliser
try/catchpour capturer les erreurs proprement. - Ne jamais supposer qu'une requête fonctionnera : tester et diagnostiquer.