Maison  >  Questions et réponses  >  le corps du texte

Essayer d'accéder au décalage de tableau d'une valeur de type null dans un tableau rempli à partir d'un jeu de résultats MySQLi

J'ai finalement réussi à mettre à jour mon installation PHP de 7.2 à 7.4 (en prévoyant de mettre à jour directement vers la version actuelle, mais en le faisant par étapes) et j'ai eu une erreur étrange lorsque j'ai exécuté le script existant :

Message : Tentative d'accès au décalage du tableau sur une valeur de type null

La ligne qui apparaît remplit simplement un tableau à partir d'un simple jeu de résultats MySQL.

for($i = 0; $resultArray[$i] = mysqli_fetch_row($result)[0]; $i++) ;

Le script fonctionne toujours bien, mais je n'aime tout simplement pas les erreurs. Je ne comprends pas pourquoi cela ne va pas et j'ai cherché pendant des heures en vain. Pourquoi cette erreur se produit-elle ? Existe-t-il un moyen d'effectuer la même opération sans erreur ?

P粉046387133P粉046387133314 Il y a quelques jours541

répondre à tous(2)je répondrai

  • P粉076987386

    P粉0769873862024-01-03 16:51:35

    Selon la documentation, une fois la fin de l'ensemble de résultats atteinte, mysqli_fetch_row 将返回 null.

    Vous pouvez utiliser des foreachloops. Je ne le recommande pas, mais c'est une solution possible.

    foreach ($result->fetch_all() as [0 => $resultArray[]]); // no body needed

    Vous n’avez vraiment pas besoin d’utiliser cet appareil étrange. Vous pouvez utiliser array_column() pour des opérations plus simples.

    $resultArray = array_column($result->fetch_all(), 0);

    répondre
    0
  • P粉681400307

    P粉6814003072024-01-03 14:58:49

    mysqli_fetch_row 将在某个时刻返回 null (d'après la documentation, il fait toujours cela lorsqu'il manque de lignes à récupérer). Mais vous ne l'avez pas vérifié avant d'essayer de lire son 0ème index, vous obtenez donc l'erreur.

    De nombreuses personnes utilisent ce style pour récupérer des lignes :

    while ($row = mysqli_fetch_row($result)) { 
      $resultArray[] = $row[0]; 
    }

    Cela évitera de tels problèmes. C’est également ainsi que vous le voyez souvent dans les exemples et la documentation.

    répondre
    0
  • Annulerrépondre