Skip to content

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

ModeDescription
PDO::ERRMODE_SILENT(par défaut) Retourne false en cas d'erreur
PDO::ERRMODE_WARNINGDéclenche un E_WARNING
PDO::ERRMODE_EXCEPTIONLè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 :

  1. Le code SQLSTATE
  2. Le code d’erreur du driver
  3. Le message d’erreur

Conclusion

  • Toujours activer PDO::ERRMODE_EXCEPTION dans vos projets.
  • Utiliser try/catch pour capturer les erreurs proprement.
  • Ne jamais supposer qu'une requête fonctionnera : tester et diagnostiquer.