📘 Chapitre 4 – Gérer les erreurs avec try/catch et exceptions PDO

1. 🎯 Objectif pédagogique

Savoir détecter et gérer les erreurs liées aux opérations sur la base de données (connexion, requêtes SQL) en utilisant les exceptions PDO et les blocs try/catch.

2. 📚 Concepts abordés

  • Utilisation des blocs try et catch en PHP
  • Gestion des exceptions PDOException
  • L’option PDO::ATTR_ERRMODE
  • Affichage contrôlé des messages d’erreur
  • Bonnes pratiques pour le debugging et la sécurité

3. 🧠 Explication théorique

Lorsqu’une erreur survient (ex. mauvaise requête SQL ou identifiants incorrects), PDO lève une exception. En activant le mode exception avec :

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

le code peut intercepter l’erreur via un try/catch.

Exemple simple :

try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
} catch (PDOException $e) {
    echo "Erreur : " . $e->getMessage();
}

4. 🛠 Tutoriel pratique

Résumé du travail : Configurer PDO pour gérer les erreurs et tester un cas d’échec de requête.

Étape 1 : Configurer la connexion

Dans connexion.php :

<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=blogdb', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connexion réussie";
} catch (PDOException $e) {
    echo "Erreur de connexion : " . $e->getMessage();
}

Étape 2 : Simuler une erreur de requête

try {
    $pdo->query("SELECT * FROM table_inexistante");
} catch (PDOException $e) {
    echo "Erreur SQL : " . $e->getMessage();
}

Étape 3 : Enregistrer les erreurs (optionnel)

Pour plus de sécurité, enregistrer l’erreur dans un fichier log plutôt que de l’afficher :

catch (PDOException $e) {
    file_put_contents('erreurs.log', $e->getMessage(), FILE_APPEND);
    echo "Une erreur est survenue. Contactez l'administrateur.";
}

5. 🧾 Résumé et points-clés

  • try/catch permet de gérer les erreurs sans interrompre le programme.
  • PDO::ATTR_ERRMODE définit comment PDO réagit aux erreurs (mode exception recommandé).
  • Pour la sécurité, ne jamais afficher les messages d’erreurs complets en production.
  • Les logs sont essentiels pour diagnostiquer les problèmes.