PDO - Gérer les erreurs

Septembre 2016


Activer l'affichage des erreurs PDO

Par défaut PDO n'affiche pas les différentes erreurs liées au code ou aux requêtes.
Pour les faire apparaitre, vous devez activer l'option lors de la connexion.
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


Comme ceci:
try{
$bdd =new PDO('mysql:host=localhost; 
 dbname=mabdd; charset=utf8', 'user', 'password');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


NB: Pensez également à activer l'affichage des erreurs PHP en activant l'option dans le php.ini ou en plaçant, au début de vos scripts PHP la ligne de code suivante :
error_reporting(E_ALL);

http://php.net/manual/fr/function.error-reporting.php

Détecter les erreurs dans les requêtes

Pour "trapper" les éventuelles erreurs de code ou de requêtes vous pouvez utiliser des blocs TRY/CATCH.
Par exemple :
//préparation de la requête et des variables
 $sql = "INSERT INTO matable (champ1,champ2)   VALUES (:valeur1,:autrevaleur)";

 $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}


NB: le fait de séparer la requête (le contenu de la variable $sql) de son exécution ( le prepare et le execute...) permet d'en faire un echo en cas de besoin. Idem pour les variables (contenues dans $datas).

Que faire si le message d'erreur concerne un souci dans la requête

C'est un autre sujet ...
mais je peux déjà vous dire qu'il faut impérativement tester vos requêtes DIRECTEMENT dans votre BDD (en passant par exemple par phpmyadmin si vous êtes en mysql ou un logiciel comme heidiSql).
Cela vous permettra de savoir exactement d'où provient l'erreur... un nom de champ ou de table mal orthographié ... un espace oublié ... des quotes manquantes...etc....

Voir aussi

Autres articles en relation avec ce thème :
http://www.commentcamarche.net/faq/27489-pdo-une-autre-facon-d-acceder-a-vos-bases-de-donnees
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
http://www.commentcamarche.net/faq/1391-php-notice-undefined-index
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
http://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

A voir également :

Ce document intitulé «  PDO - Gérer les erreurs  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.