Nel precedente articolo abbiamo affrontato alcuni interessanti problemi pratici in cui il PHP mette a disposizione del programmatore una serie di potenti funzioni per risolverle in maniera molto semplice problemi complessi. In questo articolo, invece, illustreremo l’accesso alle basi di dati ed in particolare con MySQL, uno dei strumenti utilizzanti maggiormente oggi in applicazioni web. Vedremo quindi come connettersi ad un database ed eseguiri semplici comandi SQL su di esso.
Connettersi al server
Per poter lavorare con un server MySQL è necessario innanzitutto stabilire una connessione con quest’ultimo. La funzione PHP da utilizzare per questo scopo è mysql_connect(). Questa funzione ha la seguente sintassi:
int mysql_connect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] );
i parametri necessari per stabilire una connessione sono quindi:
- l’hostname, il nome della macchina su cui gira il server MySQL;
- lo username, il nome dell’utente autorizzato ad accedere al database;
- la password dell’utente.
Ipotizzando di utilizzare la nostra macchina locale come server per il database utilizzeremo l’indirizzo IP 127.0.0.1, mentre per lo username il nome “dbuser” e la password “easypass”. In pratica il tutto si riduce al seguente frammento di codice PHP:
function Connetti() {
$hostname = '127.0.0.1';
$username = 'dbuser';
$password = 'easypass';
$conn = int mysql_connect( $hostname, $username, $password );
if (!$conn) {
echo “<h1>Connessione al server fallita!</h1>”;
exit;
} else {
echo “<h1>Connessione al server riuscita.</h1>”;
}
return $conn;
}
In questo esempio abbiamo posto tutti i parametri della connessione in altrettante variabili che potremo in un secondo tempo includere in un file esterno con la funzione require(). Questa soluzione è necessaria, e consigliata, anche se si lavora a progetti di piccole dimensioni, questo per evitare di cambiare in un secondo momento tutte le pagine PHP in cui abbiamo inserito direttamente nel codice questi parametri. Dall’esempio inoltre notiamo che la funzione mysql_connect() ritorna, all’interno della variabile $conn, un identificatore della nostra connessione al database. In caso di problemi invece ritorna il valore false. Il blocco if() successivo ha infatti il compito di interrompere l’esecuzione della pagina in caso di errore. Infine tutto il codice è stato incapsulato nella funzione utente Connetti() in modo tale da poter essere riutilizzato negli esempi successivi.
Creare un database
Per i nostri test è opportuno creare un database ad hoc all’interno del server MySQL. Il PHP mette a disposizione la funzione mysql_create_db() che evita di dover accedere alla linea di comando di MySQL per effettuare questa operazione. La sintassi di questo comando è:
int mysql_create_db(string database name, int [link_identifier] );
dove:
- database name è il nome del nuovo database da creare;
- link_identifier è il valore ritornato da mysql_connect()
Volendo creare il nostro database chiamato devtest utilizzeremo il seguente frammento di codice:
$database = 'devtest';
$conn = Connetti();
$ri = mysql_create_db( $database, $conn );
if (!$ri) {
echo “<h1>Creazione del database fallita!</h1>”;
exit;
} else {
echo “<h1>Creazione del database riuscita.</h1>”;
}
Creare un tabella
Il nostro database risulta però, a questo punto, vuoto. Sarà quindi necessario creare almeno una semplice tabella per potervi operare. Ipotizziamo di creare una semplice rubrica per memorizzare gli indirizzi di posta elettronica di alcuni nostri amici. Questa rubrica conterrà informazioni a riguardo del nickname e della e-mail di quest’ultimi. Per far cio useremo l’istruzione SQL CREATE TABLE attraverso la funzione del PHP mysql_db_query(). Questa funzione PHP ha appunto lo scopo di eseguire, su uno qualsiasi dei database disponibili sul server, un comando SQL. La sintassi della funzione è la seguente :
int mysql_db_query(string database, string query, int [link_identifier] );
dove:
- database è il database sul quale eseguire il comando;
- query è il comando SQL da lanciare;
- link_identifier è il risultato della funzione mysql_connect()
Usiamola praticamente:
$database = 'devtest';
$conn = Connetti();
$query = 'CREATE TABLE rubrica (nickname CHAR(40), email CHAR(80))';
$ri = mysql_db_query( $database, $query, $conn );
if (!$ri) {
echo “<h1>Creazione della tabella fallita!</h1>”;
exit;
} else {
echo “<h1>Creazione della tabella riuscita.</h1>”;
}
Nell’esempio utilizziamo il comando SQL CREATE TABLE per creare la tabella di nome rubrica che contiene i campi nickname ed email. Questo viene effettuato attraverso mysql_db_query() che ritorna false in caso di errore oppure un recordset, ovvero una struttura dati contenente il risultato della query. Il valore di questa variabile è significativo soltanto quando si utilizza il comando SQL select come vedremo in seguito, in quanto ritorna tutti i record risultato dell’interrogazione sul database.
Popoliamo una tabella
A questo punto abbiamo creato il nostro database e la nostra tabella che però risulta vuota, possiamo popolarla utilizzando il comando SQL insert e la funzione PHP mysql_db_query() per inviarlo al nostro server di database. Vediamone un esempio:
$database = 'devtest';
$conn = Connetti();
$nick1 = 'Antoniò;
$mail1 = 'antonio@infomedia.it';
$nick2 = 'Lorenzò;
$mail2 = 'lorenzo@infomedia.it';
$query = “INSERT INTO rubrica ( nickname , email ) VALUES( '$nick1', '$mail1' )”;
$ri = mysql_db_query( $database, $query, $conn );
if (!$ri) {
echo “<h1>Errore durante l'inserimento dei dati nella tabella!</h1>”;
exit;
}
$query = “INSERT INTO rubrica ( nickname , email ) VALUES( '$nick2', '$mail2' )”;
$ri = mysql_db_query( $database, $query, $conn );
if (!$ri) {
echo “<h1>Errore durante l'inserimento dei dati nella tabella!</h1>”;
exit;
}
Nell’esempio inseriamo tramite il comando SQL insert due record nella nostra tabella. E’ necessario ripetere più volte l’uso del comando insert, in questo caso, per inserire più record.
Pubblichiamo i nostri dati
Fino ad ora ci siamo solo soffermati solo sulle operazioni necessarie alla creazione di una nostra base di dati. Questo compito però può essere svolto anche con altri tool di amministrazioni addizionali, quali l’interprete a linea di comando mysql [1], oppure l’interfaccia di amministrazione phpMyAdmin [2]. Vedremo ora, invece, come interrogare la nostra rubrica per poter contattare direttamente via e-mail i nostri amici. Per interrogare il database useremo il comando SQL select ed alcuni funzioni del PHP per poterne elaborare i risultati. Vediamo come in questo esempio:
$database = 'devtest';
$conn = Connetti();
$query = 'select * from rubrica order by nicknamé;
$ri = mysql_db_query( $database, $query, $conn );
if (!$ri) {
echo “<h1>Errore durante l'accesso dai dati!</h1>”;
exit;
}
// scriviamo il numero di record trovati
$nr = mysql_num_rows($ri);
echo “<b>Sono stati trovati $nr records nella rubrica.</b><br>\n”;
// scriviamo a video i risultati
while ( $dati = mysql_fetch_array($ri) ) {
echo '<li><a href=”mailto:';
echo $dati[“email”];
echo '”>';
echo $dati[“nickname”];
echo “</a><br>\n”;
}
L’esempio per chiarezza è minimale. Tramite la funzione PHP mysql_db_query() inviamo il comando SQL select al nostro database server che ritorna all’interno di $ri tutti i campi e tutti i record della tabella rubrica ordinati secondo il campo nickname. Per conoscere in anticipo il numero di record ritornati, ed elaborabili utilizzando $ri, è possibile usare la funzione mysql_num_rows(), passando come argomento la variabile $ri. Per poter invece estrarre i record contenuti in $ri ci sono vari metodi ma il più semplice e funzionale è quello di utilizzare la funzione mysql_fetch_array(). Questa funzione prende un record dal risultato della query scomponendolo in un array che viene ritornato come risultato della funzione stessa. Questo array contiene un elemento per ciascun campo specificato nella query. Nel nostro esempio l’array identificato dalla variabile $dati conterrà due soli elementi: $dati[“nickname”] e $dati[“email”]; in quanto la tabella rubrica contiene solo questi due campi. Ovviamente, ad una successiva chiamata della funzione PHP mysql_fetch_array(), verrà ritornato il record successivo presente in $ri. Quando invece si arriva oltre l’ultimo record la funzione ritorna false. Per questo motivo questa funzione è di solito posta all’interno di un ciclo while, come nel nostro esempio, in quanto il ciclo termina automaticamente quando si oltrepassa l’ultimo record presente nel recordset identificato da $ri.
Conclusioni
Con questo articolo abbiamo ultimato il nostro viaggio introduttivo sul linguaggio PHP . Sia il PHP che MySQL sono software su cui è disponibile in internet un enorme quantità di documentazione e di esempi. In particolare volevo segnalarvi i forum su www.zend.com e gli articoli di www.phpbuilder.com che forniranno una serie di trucchi e di consigli utili per ogni tipo di problema o dubbio si dovesse presentare nell’uso di questi strumenti.
Riferimenti
[1] Homepage di MySQL – http://www.mysql.com/
[2] Homepage di PHPMyAdmin – http://www.phpwizard.net/projects/phpMyAdmin/