Déboguer une requête MySQL

Pendant le développement de votre site Web, il arrivera sans doute un cas où vous entrez une requête SQL qui ne fonctionne pas ou qui ne donne pas les résultats escomptés.

Plutôt que de travailler à tâtons, vous gagnerez un temps précieux en utilisant une des techniques suivantes.

▼Publicité


Mise à jour

Cet article a été ajusté pour utiliser l'extension mysqli (ex : $mysqli = new mysqli()) plutôt que l'extension mysql (ex : mysql_connect()) qui était devenue obsolète.

Consultez l'article « mysqli : la nouvelle technique pour travailler avec une base de données MySQL » pour en savoir plus sur l'extension mysqli.

Affichage du texte de la requête

  • Juste avant la ligne $mysqli->query(), utilisez vos fonctions de débogage pour afficher la variable $requete.

    Ex :

    MySQL

    $requete = "SELECT client_id,client_prenom,client_nom FROM client WHERE UPPER(client_ville)='$ville'";

    echo_debug($requete);

    $resultat = $mysqli->query($requete);

    Ceci aura pour effet d'afficher à l'écran le contenu de la requête, telle qu'elle sera vue par le serveur MySQL.

    PHP-AffichageRequeteAvececho_debug

  • Faites un copier-coller vers phpMyAdmin de la requête ainsi affichée.

    PHP-TesterRequeteDansphpMyAdmin

  • Si phpMyAdmin donne une erreur ou si la requête ne donne pas les résultats escomptés, corrigez la requête jusqu'à ce qu'elle soit valide.

    PHP-TesterRequeteDansphpMyAdmin-2

    Dans l'exemple précédent, on voit que l'identifiant s'appelle ID et non client_id.

  • Apportez les corrections nécessaires dans votre code PHP.

Affichage de mysql_error()

La fonction mysql_error() permet de retrouver le texte de l'erreur générée par MySQL.

Attention : les détails techniques ne devraient être affichés qu'en mode débogage et ce, pour deux raisons importantes :

  • L'affichage d'un message d'erreur technique peut faire fuir certains internautes.
  • Les informations présentées dans le message d'erreur peuvent fournir assez de données aux utilisateurs malveillants pour les mettre sur une bonne piste...

L'utilisation de vos fonctions de débogage pourrait corriger ces problèmes.

Ex :

PHP

$requete = "SELECT client_id,client_prenom,client_nomfamille FROM client WHERE UPPER(client_ville)='$ville'";

$resultat = $mysqli->query($requete);     // exécute la requête

if ($resultat) {    // si la requête a fonctionné

   if ($mysqli->affected_rows != 0) {    // si la requête a retourné au moins un enregistrement

      echo "<ul>";

      while ($enreg = $resultat->fetch_row()) {     // extrait chaque ligne une à une

         // affichera l'identifiant, le prénom et le nom de famille de chaque client

         echo "<li>$enreg[0] - $enreg[1] $enreg[2]</li>";

      }

      echo "</ul>";

   }

   else {

      echo "Il n'y a aucun client pour $ville.";

   }

}

else {

   echo "Nous sommes désolés, les données ne peuvent pas être affichées.";

   echo_debug(mysql_error());

}

PHP-Affichagemysql_errorAvececho_debug

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories