PHP/Programmazione/MySQL/Risultati di una query
Aspetto
Una volta ottenuto il puntatore al risultato della query tramite la funzione mysql_query è possibile procedere all'uso del result-set. Per fare ciò PHP mette a disposizione numerose funzioni:
- la più usata è
mysql_fetch_array(risultato, tipo_array)
che restituisce l'i-esimo record del fielset e incrementa di uno l'indice, dove risultato è un puntatore di fieldset MySQL. In base al parametro tipo_array la funzione restituisce valori differenti:MYSQL_ASSOC
: il risultato della funzione è un array associativo che ha per chiavi i nomi dei campi e per valori i dati contenuti nel recordMYSQL_NUM
: il risultato della funzione è un array associativo che ha per chiavi dei numeri interi e per valori i dati contenuti nel recordMYSQL_BOTH
: il risultato della funzione è un array associativo che ha per chiavi sia i nomi sia gli indici numerici dei campi e per valori i dati contenuti nel record.
- Per iterare su tutti gli elementi è sufficiente usare un ciclo
while
:
//da notare l'uguale di assegnazione e non di confronto
//che assegna a $r ad ogni iterazione il valore restituito dalla funzione...
while ($r = mysql_fetch_array($risultato, MYSQL_BOTH)) {
//stampa ad esempio i valori di una ipotetica tabella utenti sulla pagina
echo $r['nome_utente']."<br/>;";
echo $r['data_iscrizione']."<hr/>";
}
- Infatti quando finiscono i record del fieldset la funzione
mysql_fetch_array
restituisce un array vuoto, che viene assegnato alla variabile $r. Per le regole di conversione, un array vuoto viene convertito in boolean in FALSE. Negli altri casi, l'array sarà non vuoto e la variabile $r verrà convertita in TRUE.
mysql_num_rows(risultato)
restituisce il numero di righe restituite dalla query identificata da risultato. È utilizzato frequentemente per verificare durante un login l'esistenza di un determinato utente con una precisa password. Ad esempio:
<?php
//presuppone il collegamento ad un database contenente nomi utente e password
if (isset[$_POST['uid']) { //verifica che il form abbia inviato dei valori
//è meglio memorizzare le password crittandole,
//in modo che siano più sicure, tramite la funzione md5
$q = "SELECT * FROM utenti WHERE uid = '";
$q .= $_POST['uid']."' AND pwd = '".md5($_POST['pwd'])."'";
$ris = mysql_query($q, $conn);
if (mysql_num_rows($ris) == 1) { //verifica che esista l'utente
//imposta alcune variabili di sessione
$_SESSION['logged'] = true;
$_SESSION['uid'] = $_POST['uid']
''...ecc...''
} else {
?>
Nome utente o password scorretti. <a href="login.php">Ritorna</a>
<?php
}
}else{
?>
<form method="post" action="login.php">
''...qui i campi uid e pwd...''
</form>
<?php
}
?>
mysql_insert_id(database)
restituisce l'ultimo valore auto-incrementato dal database (es. campi ID)mysql_data_seek(risultato, posizione)
sposta il puntatore del fieldset risultato al record di posizione posizione (partendo da 0)