sql >> Database >  >> RDS >> Mysql

Waarom werkt mijn foreach-lus niet zoals verwacht?

mysqli_query() retourneert geen array of array-object dat u kunt gebruiken met foreach(). Het retourtype mysqli_query() is een resource. Je haalt het in een lus op, zoals je tweede oplossing.

Het is eenvoudiger om while() te gebruiken in plaats van for():

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

De lus wordt automatisch beëindigd wanneer de opgehaalde rij NULL is aan het einde van de resultatenset. U hoeft het aantal rijen voor de lus niet te weten.

Over uw opmerking:

Na wat feiten opgezocht , moet ik toegeven dat mijn antwoord hierboven niet helemaal waar is. Of is niet waar voor sommige versies van PHP.

In PHP 5.4 is een mysqli_result-bron toegevoegd Iterator functionaliteit, kunt u eigenlijk kunt gebruik het in een foreach() . Maar je host gebruikt blijkbaar een oudere versie van PHP.

Het beste is om te ontwikkelen op dezelfde versie van alle software die u gaat implementeren, zodat u niet voor dit soort verrassingen komt te staan.




  1. Dynamisch alias toewijzen aan alle veldnamen in msyql-query

  2. een geneste jsonb recursief afvlakken in postgres zonder onbekende diepte en onbekende sleutelvelden

  3. Probeer een tabel te maken van Select - SQL Server 2008 gooit fout

  4. Verbindingsbeheer in PostgreSQL:een gids