Traiter les erreurs SQL



Comme vous le savez, le langage SQL est un langage à part entière dont on se sert en PHP. S'il peut y avoir des erreurs en PHP, il peut aussi y avoir des erreurs en SQL !


Il se peut par exemple que votre requête soit mal écrite, que la table que vous voulez ouvrir n'existe pas, etc. Bref, les erreurs possibles sont là encore nombreuses.


Toutefois, ce n'est pas MySQL qui vous dira qu'il y a une erreur, mais PHP, et ce dernier n'est pas très bavard en ce qui concerne les erreurs SQL. Nous allons donc voir :

  1. comment repérer une erreur SQL en PHP ;
  2. comment faire parler PHP pour qu'il nous donne l'erreur SQL (de gré, ou de force !).

Repérer l'erreur SQL en PHP


Lorsqu'il s'est produit une erreur SQL, la page affiche le plus souvent l'erreur suivante :


Fatal error: Call to a member function fetch() on a non-object


Cette erreur survient lorsque vous voulez afficher les résultats de votre requête, généralement dans la boucle while ($donnees = $reponse->fetch()).


Quand vous avez cette erreur, il ne faut pas chercher plus loin, c'est la requête SQL qui précède qui n'a pas fonctionné. Il vous manque cependant des détails sur ce qui a posé problème dans la requête. Nous allons maintenant voir comment on peut remédier à cela. ;-)


Allez ! Crache le morceau !


Comme visiblement PHP n'a pas envie de nous donner l'erreur renvoyée par MySQL, on va le lui demander d'une autre manière. Je vous avais d'ailleurs présenté cette méthode dans un des premiers chapitres sur MySQL.

Repérez la requête qui selon vous plante (certainement celle juste avant la boucle while), et demandez d'afficher l'erreur s'il y en a une, comme ceci :

<?php

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

?>

Si la requête fonctionne, aucune erreur ne sera affichée. Si en revanche la requête plante, PHP arrêtera de générer la page et vous affichera l'erreur donnée par MySQL…


À partir de là, il va falloir vous débrouiller tout seuls, car les erreurs SQL sont assez nombreuses et je ne peux pas toutes les lister.


En général, MySQL vous dit « You have an error in your SQL syntax near 'XXX' ». À vous de bien relire votre requête SQL ; l'erreur se trouve généralement près de l'endroit où on vous l'indique.

Créé avec HelpNDoc Personal Edition: Convertir des documents Word en eBooks : Un guide étape par étape avec HelpNDoc