Utilizzare un database MySql

Stabilire il collegamento con il server MySql:

mysql_connect(server, utente, password)

Se il collegamento non riesce, la funzione restituisce il valore booleano FALSE. Per verificare che la funzione abbia restituito effettivamente un identificativo di connessione, e non il valore FALSE, generalmente si usa una sintassi di questo tipo:

$conn = mysql_connect('localhost','mario','xxx') or die("Errore nella connessione a MySql: " . mysql_error());

mysql_error() effettua la stampa dell'errore segnalato dal server MySql. In questo modo, se la connessione non è riuscita, si conosce il motivo. Se invece è riuscita, la variabile $conn contiene l'identificativo di connessione.

Una volta stabilita la connessione, selezionare il database con la funzione mysql_select_db(nomedb,connessione). Questa funzione restituisce un valore booleano che indica se la selezione del database è riuscita o no.

mysql_select_db('mio_database',$conn) or die("Errore nella selezione del db: " . mysql_error());

Non c'è bisogno di assegnare l'esito della funzione ad una variabile, perché se la selezione va male lo script si bloccherà segnalando l'errore, in caso contrario si può proseguire.

Per eseguire la query si usa la funzione mysql_query(query,connessione), alla quale viene passata la query da eseguire insieme all'identificativo di connessione. Anche questa funzione restituisce un valore, per il quale però si deve distinguere due possibilità rispetto al tipo di query:

  • se si tratta di una query di interrogazione (SELECT, SHOW, EXPLAIN, DESCRIBE), la funzione restituisce un identificativo del risultato (cioè un'altra variabile di tipo resource) se la query è andata a buon fine; se invece MySql ha rilevato degli errori, la funzione restituisce FALSE;
  • se invece si tratta di una query di aggiornamento (INSERT, UPDATE, DELETE e tutte le altre diverse da quelle viste prima), la funzione restituirà in ogni caso un valore booleano, ad indicare se l'esecuzione è andata a buon fine oppure no.

Un esempio:

$query = 'SELECT * FROM tabella';
$ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());

In questo modo, se la query ha avuto successo la variabile $ris conterrà l'identificativo del risultato, che servirà per leggere le righe restituite dal db. Se invece la query non va a buon fine, lo script si blocca segnalando l'errore.

Verifica dei risultati della query

Il fatto che una query sia stata eseguita correttamente non significa necessariamente che abbia prodotto dei risultati. Se vogliamo sapere quante righe sono state restituite da una SELECT, si può usare la funzione mysql_num_rows(risultato), che restituisce il numero di righe contenute dall'identificativo del risultato che le passiamo. Se invece si esegue una query di aggiornamento (INSERT, UPDATE, DELETE) si può usare mysql_affected_rows(connessione) che restituisce il numero di righe modificate dall'ultima query di aggiornamento.

$query = 'SELECT * FROM tabella'; $ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
$righe = mysql_num_rows($ris);
/* $righe riceve il numero di righe restituite dalla select */
$query = "UPDATE tabella SET campo1='valore' WHERE campo2='val'"; 
mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
$righe = mysql_affected_rows($conn);
/* $righe riceve il numero di righe modificate dall'UPDATE */

Mentre mysql_num_rows() richiede un identificativo di risultato, mysql_affected_rows() richiede un identificativo di connessione; infatti una query di aggiornamento non restituisce un identificativo di risultato.

Lettura dei risultati di una SELECT

Una volta effettuata una query di interrogazione abbiamo a disposizione un identificativo del risultato. Per poter leggere questo risultato si può utilizzare la funzione mysql_fetch_array(risultato), la quale, ogni volta che viene chiamata, restituisce una riga del risultato:

$query = 'SELECT * FROM tabella';
$ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
while($riga = mysql_fetch_array($ris)) {
  //codice che elabora i dati
}

Ogni volta che questo ciclo viene eseguito, nella variabile $riga c'è un reord del risultato. Questa variabile è in effetti un array che contiene i valori delle colonne restituiti dalla query. Gli indici dell'array sono i nomi delle colonne ed i loro valori sono i valori estratti dal database.

$query = 'SELECT nome, indirizzo, telefono FROM tabella';
$ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
while($riga = mysql_fetch_array($ris)) {
  print"Nome: $riga[nome]<br>"
  print"Indirizzo: $riga[indirizzo]<br>"
  print"Telefono: $riga[telefono]<br>"
  print"<br>"
}