***** CETTE PAGE EST IMPORTANTE. PLACEZ-LA DANS VOS FAVORIS *****
Attention : cette fiche donne des exemples de code pour PHP 8.x. Si vous travaillez avec PHP 7.x, référez-vous plutôt à cette fiche.
Dans cette fiche :
Le résultat d'une requête lancée avec $mysqli->query() est un objet qui donne accès, entre autres, à un tableau à deux dimensions.
Chaque ligne du tableau représente un enregistrement qui répond à la requête et chaque colonne du tableau représente un champ.
Selon les données que vous avez entrées dans la table clients, le résultat de la requête pour trouver les clients de Victoriaville pourrait être le suivant :
1 | Jacynthe | Courtois |
4 | Axelle | Demers |
2 | Marc | Frenette |
8 | Line | Jacques |
Afin de pouvoir utiliser le résultat de la requête, il faut extraire les lignes du tableau à l'aide de fetch_row() ou fetch_assoc().
Chaque enregistrement sera un tableau à une dimension (vecteur) et chaque champ correspondra à un élément du tableau.
Si vous utilisez 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.
Votre programme devra utiliser la structure de code suivante :
$requete = "...";
try {
$resultat = $mysqli->query($requete); // exécute la requête
if ($mysqli->affected_rows > 0) { // si la requête a retourné au moins un enregistrement
// balises devant être affichées avant l'ensemble des enregistrements
echo ...
// boucle pour chacun des enregistrements
while ($enreg = $resultat->fetch_row()) { // extrait chaque ligne une à une
echo ...
}
// balises devant être affichées après l'ensemble des enregistrements
echo ...
}
else {
echo "<p class='message-avertissement'>...</p>";
}
$resultat->free(); // libère immédiatement la mémoire qui était allouée - seulement utile pour une requête SELECT
} catch (Exception $e) {
echo "<p class='message-erreur'>...</p>";
echo_debug($mysqli->error);
}
Ex :
$requete = "SELECT prenom, nomfamille FROM clients ORDER BY nomfamille, prenom";
try {
$resultat = $mysqli->query($requete); // exécute la requête
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
echo "<li>$enreg[0] $enreg[1]</li>";
}
echo "</ul>";
}
else {
echo "<p class='message-avertissement'>Il n'y a aucun client dans le système.</p>";
}
$resultat->free(); // libère immédiatement la mémoire qui était allouée
} catch (Exception $e) {
echo "<p class='message-erreur'>Nous sommes désolés, les clients ne peuvent pas être affichés.</p>";
echo_debug($mysqli->error);
}
Pour mieux décoder ce qui vient de se passer, rappelez-vous que :
Si vous préférez travailler avec le nom des champs plutôt qu'un indice qui représente leur position dans la requête, fetch_assoc() sera votre ami.
Voici un second exemple qui utiise cette fois fetch_assoc().
Je vous présente seulement le corps de la boucle puisque le reste du code sera identique à celui de fetch_row().
Remarquez les accolades pour forcer l'interprétation de « $enreg['prenom'] » avant de l'inclure dans la chaîne de caractères.
while ($enreg = $resultat->fetch_assoc()) {
echo "<li>{$enreg['prenom']} {$enreg['nomfamille']}</li>";
}
Lorsqu'une requête INSERT, DELETE ou UPDATE est lancée, il n'y aura pas de données à lire. Il faut cependant s'assurer que la requête ait été effectuée avec succès.
Comme ces requêtes ont à peu près toujours besoin de variables (pour les données à insérer ou pour l'identifiant de l'enregistrement à supprimer), une démonstration sera faite plus loin dans le chapitre sur les requêtes préparées.
▼Publicité