Quando lanciamo una query tramite il php su un databse mysql abbiamo tre diversi modi di utilizzare il risultato ottenuto mediante le funzioni mysql_fetch_row,mysql_fetch_assoc e mysql_fetch_array.
Partiamo dalla funzione mysql_fetch_row, supponendo in ognuno dei casi di avere eseguito la query e avere il risultato nella variabile $res.
Inoltre supponiamo che la nostra query sia la seguente:
SELECT campo1,campo2,campo3 FROM myTab
Utilizzando la funzione mysql_fetch_row i risultati verranno traseferiti riga per riga in un array ordinato:
while ($row=mysql_fetch_row($res)){
echo $row[0]; // stampa campo1
echo $row[1]; // stampa campo2
echo $row[2]; // stampa campo3
}
I campi sono restituiti nell’ordine in cui vengono selezionati. Il che vuol dire che se la query fosse stata:
SELECT campo2,campo1,campo3 FROM myTab
echo $row[0];
Restituirebbe campo2.
La funzione mysql_fetch_assoc inveve restituisce un array associativo i cui indici sono i nomi dei vettori:
while ($row=mysql_fetch_assoc($res)){
echo $row['campo1']; // stampa campo1
echo $row['campo2']; // stampa campo2
echo $row['campo3']; // stampa campo3
}
In questo caso non dobbiamo preoccuparci dell’ordine in cui mettiamo i campi nella query in quanto ci riferiamo a ciascun campo utilizzando il nome dello stesso (o l’alias).
La funzione mysql_fetch_array torna una array che contiene sia dei riferimenti associativi ai campi sia dei riferimenti numerici, in pratica si comporta come come mysql_fetch_row e mysql_fetch_assoc insieme.
Sempre supponendo che la query sia:
SELECT campo1,campo2,campo3 FROM myTab
Potremmo scrivere:
while ($row=mysql_fetch_array($res)){
echo $row['campo1']; // stampa campo1
echo $row[2]; // stampa campo3
echo $row[1]; // stampa campo2
}
La funzione mysql_fetch_array accetta un secondo parametro opzionale, il result type tale parametro può assumere 3 valori:
MYSQL_ASSOC, MYSQL_NUM e MYSQL_BOTH.
Se il parametro e MYSQL_ASSOC il risultato sarà un array associativo come in mysql_fetch_assoc, se il paramrtro è MYSQL_NUM è come se utilizzassimo mysql_fetch_assoc, se non passimao il parametro o passiamo MYSQL_BOTH il risultato è quello descritto sopra.