Position actuelle: Accueil> Derniers articles> Que dois-je faire lorsque je rencontre un tableau vide lors de l'utilisation de mysql_fetch_assoc?

Que dois-je faire lorsque je rencontre un tableau vide lors de l'utilisation de mysql_fetch_assoc?

gitbox 2025-05-28

Lorsque vous utilisez PHP pour faire fonctionner une base de données MySQL, la fonction MySQL_Fetch_assoc est une méthode courante pour obtenir une ligne de données dans le résultat de la requête. Il renvoie un tableau associatif, le nom de clé correspond au nom de champ et la valeur de clé correspond à la valeur de champ. Cependant, nous rencontrons parfois la situation où MySQL_FETCH_ASSOC renvoie un tableau vide ou un faux , ce qui fait échouer le programme à traiter correctement les données. Cet article analysera en détail plusieurs causes courantes de ce problème et fournira des solutions correspondantes.


1. Le résultat de la requête est vide

La raison la plus courante est que la requête SQL exécutée ne renvoie aucune donnée elle-même. Par exemple, s'il n'y a pas d'enregistrements qui remplissent les conditions dans le tableau, le résultat de la requête est vide, MySQL_Fetch_assoc renvoie FALSE , et dans certains cas, il apparaîtra comme un tableau vide lors de l'utilisation d'une boucle de temps pour récupérer les données.

Exemple de code:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users WHERE id = 99999', $link); // HypothèsesidN&#39;existe pas

if (!$result) {
    die('La requête a échoué:' . mysql_error());
}

$row = mysql_fetch_assoc($result);

if ($row === false) {
    echo "Aucune donnée n&#39;est renvoyée,Le résultat de la requête est vide";
} else {
    print_r($row);
}
?>

Solution:
Assurez-vous que les conditions de requête sont correctes et qu'il y a des enregistrements dans le tableau de données qui remplissent les conditions.


2. L'exécution de la requête SQL a échoué

Si l'erreur de syntaxe de l'instruction SQL ou d'autres raisons provoquent l'échec de la requête, MySQL_Query reviendra faux . Le passé à MySQL_Fetch_assoc n'est pas une ressource de résultat valide, donc les données ne seront naturellement pas récupérées.

Exemple de code:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FORM users', $link); // Erreur de syntaxe:FORM Il devrait être FROM

if (!$result) {
    die('La requête a échoué:' . mysql_error());
}

$row = mysql_fetch_assoc($result); // Il ne sera pas exécuté ici,Parce que ce qui précède a été résilié
?>

Solution:
Après avoir exécuté la requête, assurez-vous de vérifier si $ le résultat est faux . S'il échoue, utilisez mysql_error () pour afficher le message d'erreur et corriger la syntaxe SQL.


3. Échec de la connexion de la base de données ou de la base de données

Si la connexion de la base de données échoue ou si la sélection de la base de données échoue, la requête ne peut pas être exécutée du tout, ce qui entraîne un résultat exceptionnel.

Exemple de code:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'wrongpassword');
if (!$link) {
    die('Échec de la connexion:' . mysql_error());
}

$db_selected = mysql_select_db('testdb', $link);
if (!$db_selected) {
    die('Échec de la sélection de la base de données:' . mysql_error());
}
?>

Solution:
Confirmez que les paramètres de connexion de la base de données sont corrects et que la base de données existe et que la connexion et la sélection de la base de données réussissent.


4. L'ensemble de résultats a été lu

Chaque fois que MySQL_FETCH_ASSOC est appelé, le pointeur sera déplacé vers l'arrière et la ligne suivante sera lue. Si le pointeur a atteint la fin après plusieurs appels, l'appel renvoie à nouveau false .

Exemple de code:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users', $link);

while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

// Le pointeur a atteint la fin,Renvoie l&#39;appel suivant false
$next = mysql_fetch_assoc($result);
var_dump($next); // bool(false)
?>

Solution:
Si vous devez traverser les résultats plusieurs fois, il est recommandé d'enregistrer les données sur le tableau ou de réexécuter la requête.


5. Utilisez des extensions mysql obsolètes

Le responsable du PHP a abandonné la série de fonctions MySQL_ * , et il est recommandé d'utiliser MySQLI ou PDO à la place. L'ancienne fonction MySQL_ * peut être instable dans le nouvel environnement.

Utilisez MySqli à la place:

 <?php
$link = mysqli_connect('gitbox.net', 'username', 'password', 'testdb');

if (!$link) {
    die('Échec de la connexion:' . mysqli_connect_error());
}

$result = mysqli_query($link, 'SELECT * FROM users');

if (!$result) {
    die('La requête a échoué:' . mysqli_error($link));
}

while ($row = mysqli_fetch_assoc($result)) {
    print_r($row);
}

mysqli_close($link);
?>

Résumer

mysql_fetch_assoc renvoie un tableau vide ou un faux , qui est généralement lié aux facteurs suivants:

  • Le résultat de la requête lui-même est vide.

  • L'exécution de l'instruction SQL a échoué.

  • La connexion ou la sélection de la base de données a échoué.

  • Le pointeur de set de résultat a atteint la fin.

  • Utilisez des extensions MySQL obsolètes.

En vérifiant les instructions SQL, l'état de la connexion et les résultats de la requête, vous pouvez localiser la cause profonde du problème et recommander la mise à niveau vers MySQLI ou PDO pour améliorer la sécurité et la stabilité du code.