Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum funktioniert meine foreach-Schleife nicht wie erwartet?

mysqli_query() gibt kein Array oder Array-Objekt zurück, das Sie mit foreach() verwenden können. Der Rückgabetyp von mysqli_query() ist eine Ressource. Sie rufen es in einer Schleife ab, wie Ihre zweite Lösung.

Es ist einfacher, while() statt for() zu verwenden:

$cast_list = mysqli_query($dblink, $sql);
while ($role = mysqli_fetch_assoc($cast_list)) {
    echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}

Die Schleife wird automatisch beendet, wenn die abgerufene Zeile am Ende der Ergebnismenge NULL ist. Sie müssen die Anzahl der Zeilen vor der Schleife nicht kennen.

Zu Ihrem Kommentar:

Nachdem Sie einige Fakten nachgeschlagen haben , ich muss zugeben, dass meine obige Antwort nicht ganz richtig ist. Oder gilt nicht für einige PHP-Versionen.

In PHP 5.4 fügte eine mysqli_result-Ressource Iterator hinzu Funktionalität, die Sie tatsächlich können Verwenden Sie es in einem foreach() . Aber Ihr Host verwendet anscheinend eine ältere Version von PHP.

Die beste Vorgehensweise besteht darin, alle auf derselben Version zu entwickeln Software, für die Sie bereitstellen werden, damit Sie nicht von dieser Art von Überraschung überrascht werden.