Connessione a un database MySql

Prima di tutto bisogna conoscere i parametri della connessione; per esempio:

$dbhost = "nome_local"; //Nome dell'host (hostname) su cui si trova il database MySQL

$dbname = "nome_del_db"; //Nome del database che si intende interrogare

$dbusername = "username";  //Nome utente

$dbpassword = "una_password"; //password

E' molto comodo salvare i parametri precedenti in apposite variabili dichiarate in un file esterno in modo tale da non dover modificare chissà quante pagine se anche uno solo dei parametri dovesse cambiare.

La funzione che permette la connessione al database MySql è mysql_connect():

resource mysql_connect( [string server [, string nome_utente [, string password [, bool nuova_connessione [, int client_flags]]]]] )

Per esempio:

$connessione = mysql_connect($dbhost,$dbusername,$dbpassword) or die("Connessione al database MySql fallita." . mysql_error());

$connessione conterrà l'identificativo della connessione nel caso in cui l'operazione ha avuto esito positivo.

Se esiste già una connessione aperta (ovvero mysql_connect è stata chiamata più volte con gli stessi parametri) non verranno aperte nuove connessioni è il valore della variabile $connessione sarà sempre lo stesso.

Il parametro nuova_connessione permette di modificare questo comportamento.

L'uso della funzione die() è molto utile nel caso la connessione fallisce infatti blocca l'esecuzione del codice php mostrando il messaggio di errore passato come parametro.

La funzione  mysql_error() restituisce il testo del messagio di errore della precedente operazione MySQL

Per capire l'utilità di bloccare l'esecuzione del codice provate a omettere la chiamata alla funzione die() e passate dei parametri mysql_connect() errati cosa accade??

E' molto importante per non sovraccaricare la RAM del server chiudere tutte le connessioni aperte con la funzione mysql_close():

bool mysql_close ( [resource identificativo_connessione] )

Se identificativo_connessione è omesso, viene chiusa l'ultima connessione aperta.

Una volta connessi, bisogna selezionare il database; per far ciò esiste la funzione mysql_select_db():

bool mysql_select_db ( string nome_database [, resource identificativo_connessione] )

Esempio:

$connessione = mysql_connect($dbhost,$dbusername,$dbpassword) or die("Connessione al database MySql fallita." . mysql_error());

mysql_select_db($dbname, $connessione) or die("Errore durante la selezione del database" . mysql_error()); //Restituisce TRUE in caso di successo, FALSE in caso di fallimento.

Nota: è possibile omettere l'identificativo della connessione e in tal caso la funzione si riferisce all'ultima connessione aperta.

 

Adesso che la connessione e la selezione del database sono andate a buon fine, per eseguire l'interrogazione vera e propia useremo la funzione mysql_query():

resource mysql_query ( string query [, resource identificativo_connessione [, int modo_risultato]] )

Esempio:

$risultato = mysql_query("SELECT * FROM $nome_tabella") or die("Query non valida: " . mysql_error());

Il contenuto di $risultato dipende dal tipo di query che è stata eseguita:

  • solo per le istruzioni SELECT, SHOW, EXPLAIN o DESCRIBE mysql_query() restituisce un identificativo di risorsa o FALSE in caso di errore
  • per altri tipi di istruzioni SQL, mysql_query() restituisce TRUE in caso di successo e FALSE in caso di errore

Nota: mysql_query restituisce FALSE anche se la query è sintatticamente errata.

Possiamo quindi testare il contenuto di $risultato per conoscere l'esito dell'interrogazione.

Adesso non resta che gestire i valori restituiti dall'interrogazione; le funzioni disponibili sono molteplici:

  • mysql_num_rows(), restituisce il numerodi righee di un risultat;
  •  mysql_affected_rows(), restituisce il numero di righe interessate nelle precedenti operazioni MySql;
  •  mysql_free_result(), libera la memoria occupata dal risultato;
  • mysql_fetch_array(), (è quella che personalmente uso quasi sempre), carica una riga del risultato come un array associativo, un array numerico o entrambi;
  • mysql_fetch_row(), restituisce una riga del risultato come un array enumerato;
  • mysql_fetch_assoc(), restituisce una riga del risultato come array associativo;
  • mysql_result(), restituisce i dati dal risultato.

Ecco un esempio completo:

$dbhost = "nome_local"; //Nome dell'host (hostname) su cui si trova il database MySQL

$dbname = "nome_del_db"; //Nome del database che si intende interrogare

$dbusername = "username";  //Nome utente

$dbpassword = "una_password"; //password

$nome_tabella = "una_tabella"; // nome della tabella

 

$connessione = mysql_connect($dbhost,$dbusername,$dbpassword) or die("Connessione al database MySql fallita." . mysql_error());

mysql_select_db($dbname, $connessione) or die("Errore durante la selezione del database" . mysql_error()); //Restituisce TRUE in caso di successo, FALSE in caso di fallimento.

$risultato = mysql_query("SELECT * FROM $nome_tabella") or die("Query non valida: " . mysql_error());

while ($array = mysql_fetch_array($risultato)) {

    echo "Valore=" . $array['nome_del_campo'] . "<br>";

}

mysql_query();

Ovviamente bisogna sostituire "nome_del_campo" con il vostro nome del campo... scusate il gioco di parole.