La differenza tra mysql_fetch_row, mysql_fetch_assoc e mysql_fetch_array

Loading

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.