Traquer les erreurs



Lorsqu'une requête SQL « plante », bien souvent PHP vous dira qu'il y a eu une erreur à la ligne du fetch :

Code : Console 

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\tests\index.php on line 13



Ce n'est pas très précis, je pense que vous êtes d'accord avec moi.
Ce n'est pas la ligne du fetch qui est en cause : c'est souvent vous qui avez mal écrit votre requête SQL quelques lignes plus haut.

Prenez l'habitude de rajouter le code or die(print_r($bdd->errorInfo())) sur la même ligne que votre requête pour afficher des détails sur l'erreur.


Cas d'une requête simple



Si on reprend l'exemple de tout à l'heure, on doit donc écrire :

Code : PHP

1

2

3

<?php

$reponse = $bdd->query('SELECT nom FROM jeux_video') or die(print_r($bdd->errorInfo()));

?>



Ce code qu'on a rajouté ne sera exécuté que s'il y a une erreur. Il affichera alors des informations détaillées sur l'erreur SQL qui vous permettront de comprendre ce qui ne va pas dans votre requête.

Par exemple, supposons que j'écrive mal le nom du champ :

Code : PHP 

1

2

3

<?php

$reponse = $bdd->query('SELECT champinconnu FROM jeux_video') or die(print_r($bdd->errorInfo()));

?>



L'erreur suivante s'affichera :

Code : Console 

Unknown column 'champinconnu' in 'field list'



C'est de l'anglais, certes, mais c'est déjà beaucoup plus précis que l'erreur que l'on avait tout à l'heure. Si on traduit, cela signifie : « La colonne champinconnu est introuvable dans la liste des champs ». En effet, il n'y a aucun champ qui s'appelle champinconnu.


Cas d'une requête préparée



Si vous utilisez une requête préparée, rajoutez le code qui affiche l'erreur sur la même ligne que le execute(). Attention cependant à appeler la méthode errorInfo() sur l'objet $req et non $bdd :

Code : PHP 

1

2

3

4

<?php

$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = :possesseur');

$req->execute(array('possesseur' => 'Patrick', 'prixmax' => 20)) or die(print_r($req->errorInfo()));

?>


Lorsque vous avez un problème avec une requête et que vous voulez demander de l'aide sur les forums, donnez toujours l'erreur renvoyée par le or die(print_r($bdd->errorInfo())). Cela aidera énormément les gens à comprendre votre erreur.

Créé avec HelpNDoc Personal Edition: Révolutionnez la sortie de votre fichier d'aide CHM avec HelpNDoc