Vediamo ora come realizzare un semplice script PHP in grado di connettersi ad un server MySQL. La connessione avviene grazie ala funzione mysql_connect(). I dati necessari alla connessione sono:
La funzione mysql_connect() restituisce come risultato un numero che costituisce l'identificativo di connessione MySQL ("MySQL link identifier" oppure " MySQL-Link resource") in caso di successo oppure FALSE in caso contrario. E' quindi possibile verificare l'esito della connessione semplicemente controllando il risultato restituito da mysql_connect().
Se qualcosa va storto possiamo inoltre ottenere maggiori informazioni sull'accaduto utilizzando un'altra funzione, mysql_error(), che ci mostrerà un messaggio esplicativo sul problema verificatosi.
Effettuata la connessione a MySQL si è soliti specificare il nome del database su cui si vogliono effettuare le query. Infatti uno script PHP generalmente effettua diverse query ma tutte su tebelle appartenenti ad uno stesso database. Per dichiarare il nome del database si usa la funzione mysql_select_db() che restituisce TRUE o FALSE a seconda dell'esito dell'operazione. Anche questa volta conviene subito controllare tale risultato ed eventualmente mostrare un messaggio di errore con la funzione mysql_error().
Anche se tutte le connessioni ai server MySQL vengono automaticamente chiuse alla fine dell'esecuzione dello script, è buona norma chiudere la connessione esplicitamente, appena lo script ha terminato le operazioni con il database. Per farlo basta richiamare la funzione mysql_close() a cui passiamo come parametro l'identificativo di connessione ottenuto da mysql_connect().
Vediamo quindi un semplice esempio di connessione, selezione del DB e chiusura del link:
<?php
$link = mysql_connect('localhost', 'nome_utente', 'password');
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}
$db_selected = mysql_select_db('prova', $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}
echo 'connesso con successo';
mysql_close($link);
?>
Ecco nel dettaglio il funzionamento del precedente script:
La connessione va eseguita una sola volta per script, generalmente all'inizio del codice, poiché è necessario che questa preceda l'esecuzione delle query. E' possibile effettuare più connessioni all'interno di uno stesso script ma questo ha senso solo se ci si deve interfacciare con diversi server MySQL, circostanza piuttosto rara.
Quella vista è la procedura di connessione comunemente impiegata negli script PHP/MySQL. Si possono verificare però condizioni e circostanze che richiedono un uso differente della funzione mysql_connect(), mostrate di seguito attraverso degli esempi:
$link = mysql_connect('miodominio.it:3307', 'nome_utente', 'password');
$link = mysql_connect('127.0.0.1:3307', 'nome_utente', 'password');
$link = mysql_connect('/tmp/mysql', 'nome_utente', 'password');
$link = mysql_connect('localhost:/tmp/mysql.sock', 'nome_utente', 'password');
Accanto all'indicazione del server, del nome utente e della password, la funzione mysql_connect() accetta due ulteriori parametri:
new_link: se in uno script viene chiamata la funzione mysql_connect() due o più volte con gli stessi parametri, questa restituirà sempre lo stesso identificativo di connessione. Questo perché mysql_connect() evita di aprire nuovi (inutili) link ad uno stesso server MySQL. Se si vuole disabilitare questo comportamento basta porre il parametro new_link a TRUE.
client_flags: una combinazione di flag (MYSQL_CLIENT_IGNORE_SPACE, MYSQL_CLIENT_IGNORE_SPACE, MYSQL_CLIENT_INTERACTIVE, MYSQL_CLIENT_SSL).
Per i dettagli si rimanda alla documentazione ufficiale.
La procedura di connessione vista comporta la creazione di un nuovo link tra PHP e MySQL ad ogni esecuzione dello script. Questo collegamento viene interrotto con la funzione mysql_close() o automaticamente al termine dello script. Alla semplicità di questo approccio si contrappone un'evidente inefficienza: la procedura di connessione, ripetuta ad ogni esecuzione dello script, potrebbe risultare onerosa in termini di prestazioni, soprattutto se PHP e MySQL sono su macchine differenti.
Per ovviare a questo problema è possibile utilizzare le connessioni persistenti. In pratica, attraverso la funzione mysql_pconnect() che segue la stessa sintassi della mysql_connect(), si cerca di riciclare vecchie connessioni precedentemente aperte e ancora attive. Il funzionamento è il seguente:
Come accennato, le connessioni persistenti hanno come unico obbiettivo la riduzione dell'overhead legato alla fase di creazione dei link tra PHP e MySQL. Purtroppo però l'uso delle connessioni persistenti richiede una certa abilità nel configurare il server. Se infatti MySQL è configurato per non aprire più di un certo numero di connessioni contemporaneamente, la richiesta di una ulteriore connessione da parte di PHP non verrà soddisfatta con conseguenze ovvie sul suo funzionamento dello script.
Per questo, e per altri inconvenienti che si potrebbero verificare, si rimanda alla documentazione di PHP (in particolare a questa pagina) e MySQL.