codice:
// la stringa è la query che fai, la puoi passare
// come variabile o direttamente come stringa
// la variabile $db è a variabile di connessione a mysql
// parametro utile ma non indispensabile (in alcuni casi)
// per dire alla fnzione _query in quale connesione operare
// di default la prima che trova se non specificato
// (in alcuni casi ci si potrebbe connettere a più di un database)
// la funzione mysql_unbuffered_query è simile a mysql_query
// solo che non memorizza i risultati (non è possibile sapere se la query
// ha dato risultati o meno con mysql_num_rows, ad esempio)
$query = mysql_unbuffered_query("SELECT nome,codice FROM tabella ORDER BY id", $db);
// il ciclo while serve a leggere i dati restituiti dalla query
// la chiocciola serve ad evitare errori o notice qualora la query
// non dovesse restituire nessun dato.
// è un' alternativa veloce ad una query tipo
// $query = mysql_query($myquery, $mydb);
// if(mysql_num_rows($query) > 0) {
// while($r = mysql_fetch_ ... eccetera) {}
// }
// siccome tu non usavi il controllo sul risultato
// tanto valeva usare la più veloce mysql_unbuffered_query e strtturare
// il ciclo while in quel modo
while(@$r = mysql_fetch_row($query))
// per prendere il risultato di una query abbiamo diverse funzioni
// tra cui mysql_fetch_row, la più veloce, che non restituisce
// il nome dei campi (più pulito e leggibile) ma le sole posizioni
// $r[0] = primo field restituito dalla query
// $r[1] = secondo fields ... e così via
// "SELECT a, b, c FROM table"
// $r[0] sarà a o l'equivalente di $r['a'] in mysql-fetch_assoc / mysql_fetch_array
// $r[1] sarà b
// $r[2] sarà c
$select .= '<option value="'.$r[1].'">'.$r[0].'</option>';
// l' operatore di assegnazione .=
// serve ad accodare una stringa ad un altra già esistente
// in questo caso chiude la select aperta in dichiarazione
// della variabile $select = '<select name="selezione">';
$select .= '</select>';
tutto questo e molto di più su rieducascional channel 