Travailler avec une base de données MySQL

La majorité des sites Web utilisent une base de données. Et pour PHP, la solution naturelle est MySQL.

Ce billet vous montrera les instructions PHP permettant de :

Mise à jour

L'utilisation de mysql_connect(), qui est présentée ici, est obsolète. Vous devez désormais utiliser l'extension mysqli. Consultez l'article « mysqli : la nouvelle technique pour travailler avec une base de données MySQL » à ce sujet.


▼Publicité

Branchement à la base de données

Deux instructions sont nécessaires pour se brancher sur une base de données MySQL :

  • mysql_connect() permet le branchement au serveur
  • mysql_select_db() permet la sélection de la base de données

Ex :

PHP

mysql_connect("localhost","usagermysql","motdepasse");

mysql_select_db("garage");

Vérifier si la connexion a fonctionné

Puisqu’il s’agit d’opérations absolument nécessaires pour le bon fonctionnement du site, on fera un appel à la fonction die() qui arrête l’exécution des lignes suivantes en cas de problème.

Ex :

PHP

mysql_connect("localhost","usagermysql","motdepasse") or die("Impossible de se brancher au serveur de base de données");

mysql_select_db("garage") or die("Base de données non disponible");

Attention : l'utilisation de die() dans le contexte actuel est correcte. Cependant, il faut limiter l'utilisation de cette fonction dans votre programme PHP car elle met fin à l'exécution du code. Donc, tout le code qui suit l'appel à die() ne sera pas exécuté.

Effectuer une requête SQL par programmation

La méthode mysql_query() permet de lancer une requête au serveur MySQL.

Pour faciliter le travail, nous allons toujours utiliser une variable nommée $requete dans laquelle nous allons inscrire la requête. Il peut s'agir d'une clause SELECT, UPDATE, DELETE, etc.

Nous allons ensuite recevoir le résultat de la requête dans une variable $resultat.

Ex :

PHP

// retrouver la liste des clients de Victoriaville

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

$resultat = mysql_query($requete);

Requête contenant des variables

Si une partie de la requête dépend d'une variable, on prendra soin d'entourer la requête de guillemets. Ceci permettra à PHP d'interpréter la variable.

Notez que si la variable contient du texte à comparer à un champ, il faut entourer la variable d'apostrophes car SQL entoure toujours les chaînes de caractères d'apostrophes.

PHP

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

Vérification de la requête

Deux vérifications essentielles

Après chaque requête, vous devez toujours effectuer deux vérifications :

  • Est-ce que la requête a fonctionné ?
  • Est-ce que la requête a donné des résultats ?

Si vous omettez l'une ou l'autre de ces étapes, votre site Web pourrait planter ou donner des résultats inattendus.

La requête est-elle valide ?

Une requête pourrait ne pas être valide pour plusieurs raisons :

  • Vous avez effectué une erreur de syntaxe.
  • Vous avez mal orthographié le nom d'un champ ou d'une table.
  • La structure de la table a changé.
  • etc.

Pour vérifier si la requête a fonctionné, faites toujours suivre le mysql_query() de la vérification suivante :

Ex :

PHP

$requete = "...";

$resultat = mysql_query($requete);

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

   …

}

La requête a-t-elle donné des résultats ?

Certains traitements devront nécessiter un travail particulier lorsque la requête ne retourne aucun enregistrement. Par exemple, si on doit afficher la liste des clients de Victoriaville et qu'il n'y en a aucun dans la base de données, on voudra afficher un message plutôt que de laisser la page blanche.

Pour vérifier si une requête a retourné des enregistrements, on peut utiliser mysql_num_rows().

Ex :

PHP

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

$resultat = mysql_query($requete);

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

   if (mysql_num_rows($resultat) != 0) {    // si la requête a retourné au moins un enregistrement

      …   // traitement des données

   }

   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.";

}

Lire les résultats d'une requête MySQL

Le résultat de la requête est un tableau à deux dimensions. Chaque ligne du tableau représente un enregistrement répondant à la condition de la requête et chaque colonne du tableau représente un champ extrait. Selon les données que vous avez entrées dans la table client, le résultat de la requête pour trouver les clients de Victoriaville pourrait être le suivant :

1 Jacynthe Courtois
2 Marc Frenette
4 Axelle Demers
8 Line Jacques

Requête qui retourne une série d'enregistrements

Afin de pouvoir utiliser le résultat de la requête, il faut extraire les lignes du tableau à l'aide de mysql_fetch_row() ou mysql_fetch_assoc(). Chaque enregistrement sera un tableau à une dimension (vecteur) et chaque champ correspondra à un élément du tableau.

Si vous utilisez mysql_fetch_row(), vous devrez utiliser un indice pour obtenir le champ désiré. Le premier champ mentionné dans la requête sera $enreg[0], le second champ sera $enreg[1], etc.

Ex :

PHP

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

$resultat = mysql_query($requete);     // exécute la requête

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

   if (mysql_num_rows($resultat) != 0) {    // si la requête a retourné au moins un enregistrement

      echo "<ul>";

      while ($enreg = mysql_fetch_row($resultat)) {     // extrait chaque ligne une à une

         // affichera le code, 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.";

}

Pour mieux décoder ce qui vient de se passer, rappelez-vous que chaque itération de la boucle place une ligne du tableau dans le vecteur $enreg. Le premier champ de la requête étant client_id, nous pouvons retrouver le code du client en utilisant $enreg[0]. Le second champ étant le nom, on utilisera $enreg[1] pour le retrouver.

Requête qui retourne un seul enregistrement

Parfois, on recherchera un seul enregistrement dans une table. La logique utilisée pourra ressembler à celle-ci :

Ex :

PHP

$requete = "SELECT client_prenom,client_nomfamille FROM client WHERE client_id='$id'";

$resultat = mysql_query($requete);     // exécute la requête

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

   if (mysql_num_rows($resultat) != 0) {    // si la requête a retourné au moins un enregistrement

      $enreg = mysql_fetch_row($resultat);   // la seule ligne du tableau sera maintenant accessible

      echo "<p>$enreg[0] $enreg[1]</p>";      // affichera le prénom et le nom de famille du client demandé

   }

   else {

      echo "Il est impossible de retrouver les données du client.";

   }

}

else {

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

}

On voit donc qu'il est inutile d'effectuer une boucle si on ne cherchait à retrouver qu'un seul enregistrement. Le tableau des résultats, même s'il ne contient qu'une seule ligne, ne peut pas être accessible directement. On extraira donc sa seule ligne avec mysql_fetch_row().

mysql_fetch_assoc()

Si vous préférez travailler avec mysql_fetch_assoc(), vous pourrez utiliser le nom des champs au lieu d'un indice numérique.

Voici un second exemple utilisant cette fois mysql_fetch_assoc().

Remarquez l'utilisation des accolades pour forcer l'interprétation de « $enreg['client'] » avant de l'inclure dans la chaîne de caractères.

Ex :

PHP

while ($enreg = mysql_fetch_assoc($resultat)) {

   echo "<li>{$enreg['client_id']} - {$enreg['client_prenom']} {$enreg['client_nomfamille']}</li>";

}

Pour plus d'information

« MySQL PHP API ». MySQL.com. http://dev.mysql.com/doc/refman/5.0/en/apis-php.html

Dans cette page Web, la section 20.9.1. MySQL est particulièrement intéressante. Vous y trouverez des exemples ainsi qu'une liste des fonctions qui pourront être utilisées dans PHP pour interagir avec MySQL.

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