Les exemples de code disponibles sur le Web répondent rarement aux qualités essentielles d'un programme : robuste٫ fonctionnel٫ sécuritaire٫ convivial٫ performant et clair.
Dans une application PHP qui effectue une requête à la base de données, il est essentiel de corriger quelques lacunes fréquentes.
Après chaque requête, vous devez toujours effectuer deux vérifications :
Si vous omettez l'une ou l'autre de ces vérifications, votre site Web pourrait planter, donner des résultats inattendus ou même offrir une porte d'entrée aux hackers.
Commençons par la première vérification : la requête a-t-elle fonctionné.
Une requête pourrait ne pas fonctionner pour plusieurs raisons :
Pour vérifier si la requête a fonctionné, il faut travailler avec un try...catch depuis PHP 8.
$requete = "...";
try {
$resultat = $mysqli->query($requete); // exécute la requête
...
} catch (Exception $e) {
echo "<p class='message-erreur'>Nous sommes désolés, les données ne peuvent pas être affichées.</p>";
}
Si vous travaillez avec PHP 7.x, les erreurs de requête seront vérifiées comme suit :
$requete = "...";
$resultat = $mysqli->query($requete);
if ($resultat) { // si la requête a fonctionné
...
}
else {
echo "<p class='message-erreur'>Nous sommes désolés, les données ne peuvent pas être affichées.</p>";
}
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 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 $mysqli->affected_rows.
$requete = "SELECT id, prenom, nomfamille FROM clients ORDER BY nomfamille, prenom";
try {
$resultat = $mysqli->query($requete);
if ($mysqli->affected_rows > 0) { // si la requête a retourné au moins un enregistrement
... // traitement des données
}
else {
echo "<p class='message-avertissement'>Il n'y a présentement 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 données ne peuvent pas être affichées.</p>";
}
▼Publicité