Come gestire i dati ottenuti da una query

Una volta eseguita una query di SELECT è possibile eseguire delle istruzioni di codice per ognuno dei record risultanti.

PHP offre diverse funzioni che permettono di estrarre i valori dei campi dei record risultanti da una query di selezione. La differenza principale tra le varie possibilità offerte è data dalla tipologia di dato che viene associata al record.
mysql_fetch_row($result) estrae il record successivo nel record-set rappresentato da $result in forma di array. E' possibile cioè accedere ai valori dei singoli campi estratti utilizzando codice del tipo
$sql = "SELECT codice, descrizione FROM prodotti";
$result = mysql_query($sql);
$array = mysql_fetch_row($result);
print "CODICE: ".$array[0]."<br>";
print "DESCRIZIONE: ".$array[1]."<br>";

Verranno stampati il codice e la descrizione del primo prodotto trovato dalla query $sql.
Se non esiste nessun record successivo il valore ritornato da mysql_fetch_row() sarà FALSE.

Una modo più comodo per accedere ai campi, soprattutto in presenza di query con un gran numero di dati estratti è mysql_fetch_array($result)
il comportamento di fetch dei dati è simile a quello di mysql_fetch_row(), il valore aggiunto è dato dal fatto che sarà possibile accedere al particolare campo indicando esattamente il suo nome, vediamo lo stesso esempio:
$sql = "SELECT codice, descrizione FROM prodotti";
$result = mysql_query($sql);
$array = mysql_fetch_array($result);
print "CODICE: ".$array['codice']."<br>";
print "DESCRIZIONE: ".$array['descrizione']."<br>";

come si può notare mysql_fetch_array() rende il codice più leggibile senza per questo influire sulle perfomance del recupero di dati.
Una possibile fonte di errore può essere invece il fatto che può capitare, lavorando con query su diverse tabelle, di dovere estrarre campi con lo stesso nome, in questo caso sarà necessario utilizzare degli alias all'interno del codice SQL perchè altrimenti il valore di $array[$nome_campo] sarà relativo solamente all'ultimo campo di nome $nome_campo presente nella query come nel caso di
$sql = "
SELECT prodotti.codice, prodotti.descrizione, categoria.descrizione
FROM prodotti, descrizione
WHERE descrizione.id = prodotti.id_descrizione";
$result = mysql_query($sql);
$array = mysql_fetch_array($result);
print "CODICE Prod: ".$array['codice']."<br>";
print "DESCRIZIONE Prod: ".$array['descrizione']."<br>";
print "DESCRIZIONE Cat: ".$array['descrizione']."<br>";

mentre
$sql = "
SELECT prodotti.codice, prodotti.descrizione, categoria.descrizione AS desc_cat
FROM prodotti, descrizione
WHERE descrizione.id = prodotti.id_descrizione";
$result = mysql_query($sql);
$array = mysql_fetch_array($result);
print "CODICE Prod: ".$array['codice']."<br>";
print "DESCRIZIONE Prod: ".$array['descrizione']."<br>";
print "DESCRIZIONE Cat: ".$array['desc_cat']."<br>";

ci mostra un output più consono alle nostre aspettative.

E' possibile utilizzare le funzioni di fetch ricorsivamente per estrarre tutti i record risultati da una query SQL:
$sql = "
SELECT prodotti.codice, prodotti.descrizione, categoria.descrizione AS desc_cat
FROM prodotti, descrizione
WHERE descrizione.id = prodotti.id_descrizione";
$result = mysql_query($sql);
while ($array = mysql_fetch_array($result))
{
print "CODICE Prod: ".$array['codice']." - ";
print "DESCRIZIONE Prod: ".$array['descrizione']." - ";
print "DESCRIZIONE Cat: ".$array['desc_cat']."<br><br>";
}

la condizione del ciclo while sarà TRUE fino a che sarà possibile estrarre record dalla risorsa ottenuta dall'esecuzione della query, dopo l'ultimo record la condizione diventa FALSE e il ciclo termina.

Privacy Policy