Mysql
 sql >> Database >  >> RDS >> Mysql

Perché il mio ciclo foreach non funziona come previsto?

mysqli_query() non restituisce un array o un oggetto array che puoi usare con foreach(). Il tipo restituito di mysqli_query() è una risorsa. Recuperi da esso in un ciclo, come la tua seconda soluzione.

È più semplice usare while() invece di for():

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

Il ciclo terminerà automaticamente quando la riga recuperata è NULL alla fine del set di risultati. Non è necessario conoscere il numero di righe prima del ciclo.

Re il tuo commento:

Dopo aver cercare alcuni fatti , devo ammettere che la mia risposta sopra non è del tutto vera. Oppure non è vero per alcune versioni di PHP.

In PHP 5.4, una risorsa mysqli_result ha aggiunto Iterator funzionalità, in realtà puoi usalo in un foreach() . Ma il tuo host apparentemente utilizza una versione precedente di PHP.

La best practice è sviluppare sulla stessa versione di all software su cui eseguirete la distribuzione, in modo da non essere colti da questo tipo di sorpresa.