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

mysql_fetch_array e while loop in php

Fondamentalmente stai fraintendendo come funzionano queste cose.

L'"array" in mysql_fetch_array non è un array di tutti i record, ma un array dei dati all'interno del record corrente.

Nel tuo caso, stai recuperando un solo campo, quindi l'array conterrà solo un singolo elemento (ad esempio $row[0] ), ma il principio è lo stesso:è un array del singolo record che hai appena letto.

Solo i dati per il record corrente si trovano nell'array in qualsiasi momento. Questo è ciò che il while il ciclo è per; torna indietro a tutti i carichi ogni record uno dopo l'altro.

Se vuoi creare un array che contenga tutti i dati, devi farlo in questo modo:

$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
    $fullData[] = $row[0];
}

Ciò metterà tutti i dati che stai leggendo in un unico grande array, che è quello che ti aspetti. Ora puoi fare quello che volevi fare nella domanda:

echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';

Spero di esserti stato d'aiuto.

Vale la pena sottolineare qui che mysql_xxx() famiglia di funzioni sono deprecati e considerati obsoleti. Se stai solo imparando PHP (cosa che sembrerebbe essere il caso), ti consiglio vivamente di interrompere l'apprendimento di queste funzioni e di imparare il PDO libreria invece. È più moderno e ha molte funzionalità rispetto a mysql le funzioni non possono fornire. Inoltre, le versioni future di PHP rimuoveranno mysql funziona completamente, quindi a un certo punto dovrai cambiare -- potrebbe anche essere adesso, mentre stai ancora imparando.

Inoltre (per mantenere le cose pertinenti alla domanda), la libreria PDO ha una funzionalità che fa effettivamente ciò che stai cercando in una singola funzione:PDO::fetchAll() . Usare questo metodo significa che puoi recupera tutti i dati in un unico grande array in una riga senza la necessità di eseguire un ciclo while. Il codice sarebbe un po' così:

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();

(esempio tratto dal manuale PHP per PDO::fetchAll )