Lorsque vous utilisez une extension MySQLI pour se connecter à la base de données dans PHP, la méthode fetch_assoc () de l'objet MySQLI_RESULT est utilisée pour obtenir la ligne suivante d'enregistrements à partir de l'ensemble de résultats de requête. Cette méthode renvoie un tableau associatif contenant le nom de la colonne comme nom de clé et les données correspondantes comme valeur. S'il n'y a plus d'enregistrements à retourner, fetch_assoc () renvoie null . Cependant, de nombreux développeurs rencontreront un problème lors de l'utilisation: même si la requête ne semble avoir aucune erreur, fetch_assoc () renvoie toujours NULL . Cet article explorera les causes de ce problème et fournira des solutions.
Lorsque fetch_assoc () est appelé avec mysqli_result pour retourner null , il y a plusieurs raisons possibles:
Le cas le plus courant est que la requête exécutée ne renvoie aucune donnée. Par exemple, si vous exécutez une requête sélectionnée , mais il n'y a aucun enregistrement dans la base de données qui répond aux critères, fetch_assoc () renvoie NULL . Ce n'est pas une erreur, mais un comportement normal, indiquant qu'il n'y a plus de données à retourner.
$query = "SELECT * FROM users WHERE id = 10"; // Hypothèses id = 10 N'existe pas
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
if ($row === null) {
echo "Aucun enregistrement trouvé!";
}
S'il y a une erreur dans l'instruction SQL Query elle-même, MySQLI_Query () reviendra False et MySQLI_RESULT ne sera pas créé. Si vous ne vérifiez pas si le résultat de la requête est exécuté avec succès, vous pouvez penser à tort que l'exécution de la requête est réussie, mais en fait, il ne renvoie pas de résultat valide.
$query = "SELEC * FROM users WHERE id = 10"; // SQL Erreur de syntaxe
$result = $mysqli->query($query);
if ($result === false) {
echo "La requête a échoué: " . $mysqli->error;
}
Lorsque fetch_assoc () est appelé, si les données de l'ensemble de résultats ont été complètement extraites, les appels fetch_assoc () ultérieurs renvoient NULL , ce qui signifie que la requête n'a plus de données à retourner.
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
echo $row['name'] . "<br>";
}
// Appelé à nouveau ici fetch_assoc() Reviendra null
$row = $result->fetch_assoc();
if ($row === null) {
echo "Plus de données!";
}
Si une erreur de connexion de la base de données ou un autre problème se produit pendant la requête, l'objet mysqli_result peut ne pas renvoyer les données correctement. Pour le moment, vous pouvez déboguer et résoudre le problème en vérifiant le message d'erreur de MySQLI .
$mysqli = new mysqli('localhost', 'root', 'password', 'database');
if ($mysqli->connect_error) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
if ($result === false) {
echo "La requête a échoué: " . $mysqli->error;
}
Tout d'abord, assurez-vous que la requête exécutée renvoie les résultats valides. Vous pouvez éviter les erreurs inutiles en vérifiant si la requête est réussie:
$query = "SELECT * FROM users WHERE id = 10";
$result = $mysqli->query($query);
if ($result === false) {
echo "La requête a échoué: " . $mysqli->error;
} else {
$row = $result->fetch_assoc();
if ($row) {
echo "Trouvez le record: " . $row['name'];
} else {
echo "Aucun enregistrement trouvé!";
}
}
Assurez-vous que l'instruction SQL est exempte d'erreurs. Des informations d'erreur détaillées peuvent être obtenues en utilisant les fonctions mysqli_error () ou mysqli_errno () .
$query = "SELECT * FROM users WHERE id = 10";
$result = $mysqli->query($query);
if ($result === false) {
echo "La requête a échoué: " . $mysqli->error;
}
Confirmez qu'il n'y a aucun problème avec la connexion de la base de données. Les erreurs de connexion sont souvent l'une des causes courantes de la défaillance de la requête.
$mysqli = new mysqli('localhost', 'root', 'password', 'database');
if ($mysqli->connect_error) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
Pendant le processus de débogage, vous pouvez utiliser des fonctions telles que var_dump () ou print_r () pour sortir le contenu du jeu de résultats pour vous aider à vérifier les résultats renvoyés.
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
var_dump($result); // Vérifiez l'objet de résultat de la requête
La méthode fetch_assoc () de mysqli_result n'est pas nécessairement erronée de retourner null , c'est un état normal dans l'ensemble de résultats de requête, indiquant qu'il n'y a plus de données disponibles pour l'extraction. Ce comportement peut être évité en vérifiant soigneusement si la requête renvoie les résultats, si le SQL est exécuté correctement et si la connexion de la base de données est normale. J'espère que l'analyse et les solutions de cet article pourront vous aider à mieux comprendre et résoudre ce problème.