L'extension MySQL est un choix courant lors de l'utilisation de PHP pour manipuler les bases de données MySQL. Après avoir exécuté une requête, vous obtenez généralement un objet mysqli_result , mais de nombreux développeurs ignorent un lien important: juger si le résultat de la requête est vide. Cet article expliquera en détail comment juger et gérer correctement la situation où le résultat de la requête est vide.
Regardons d'abord un exemple de requête simple:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE status = 'active'";
$result = $mysqli->query($sql);
if (!$result) {
die("La requête a échoué: " . $mysqli->error);
}
// Voici la partie clé:Vérifiez s'il y a des résultats
if ($result->num_rows === 0) {
echo "Aucun utilisateur qui répond aux critères n'a été trouvé。";
} else {
while ($row = $result->fetch_assoc()) {
echo "nom d'utilisateur: " . htmlspecialchars($row['username']) . "<br>";
}
}
$result->free();
$mysqli->close();
?>
1 ?? Vérifiez si $ le résultat est faux
Cela indique qu'une erreur s'est produite dans l'instruction de requête SQL elle-même, comme une erreur de syntaxe ou le tableau n'existe pas. utiliser:
if (!$result) {
// La requête a échoué,Gestion des erreurs
}
2 ?? Vérifiez $ Result-> num_rows
Lorsque la requête réussit mais qu'aucune ligne correspondante n'est adaptée, NUM_ROWS est 0 . utiliser:
if ($result->num_rows === 0) {
// La requête est vide,Gérer aucun résultat
}
3 ?? Évitez d'utiliser fetch_assoc () directement pour déterminer les résultats vides <br> Beaucoup de gens l'utilisent directement:
if ($row = $result->fetch_assoc()) { ... }
Cette méthode n'entrera pas dans la boucle sans résultats, mais il est impossible de distinguer explicitement s'il s'agit d'un "résultat vide" ou "il y a une ligne mais la condition n'est pas remplie". Il est recommandé de vérifier explicitement num_rows .
Dans les projets réels, il ne suffit pas de produire directement "aucun résultat". Vous pouvez optimiser selon le scénario, tel que:
Retourner à une page d'invite amicale;
Enregistrer les journaux pour faciliter la post-analyse;
Sautez dans d'autres pages, telles que:
if ($result->num_rows === 0) {
header("Location: https://m66.net/no-results.html");
exit;
}