PHP/Programmazione/MySQL/Risultati di una query

Indice del libro

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 record
    • MYSQL_NUM: il risultato della funzione è un array associativo che ha per chiavi dei numeri interi e per valori i dati contenuti nel record
    • MYSQL_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. &lt;a href="login.php"&gt;Ritorna&lt;/a&gt;
  <?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)