Database in PHP
Da Hacknowledge.
PHP include il supporto di default per database MySQL, supporto che torna estremamente comodo quando si devono sviluppare applicazioni web che devono interagire con basi di dati (es. applicazioni per la gestione di utenti in un sistema, per la gestione di un forum o di un blog e in generale per la gestione di contenuti articolati sul web). Le primitive messe a disposizione da PHP per interagire con un database MySQL sono estremamente intuitive da usare, a patto ovviamente che tramite PHP ci si colleghi a un database server valido e con MySQL ben configurato.
Indice |
[modifica] mysql_connect
Prima di eseguire qualsiasi richiesta ad un database è necessario collegarsi al database stesso. Per fare ciò useremo la primitiva mysql_connect(), strutturata nel seguente modo:
resource mysql_connect (host, utente, password);
dove host, utente e password sono rispettivamente l'SQL server a cui collegarsi e i dati di login per autenticarsi su di esso. La funzione ritorna il descrittore del database se la connessione avviene in modo corretto, false se ci sono errori. Esempio:
$host="sql_server"; $user="root"; $pass="prova"; if (($db=mysql_connect($host,$user,$pass))==false) die ("Errore di connessione al database\n");
[modifica] mysql_select_db
Il secondo passo da fare è selezionare il database con cui interagire. Ciò è possibile tramite la funzione mysql_select_db, che prende come argomenti il nome del database con cui si vuole interagire e, opzionalmente, il descrittore della connessione (creato in precedenza con mysql_connect). Esempio:
$nome_db="forum"; mysql_select_db ($nome_db,$db) or die ("Impossibile usare il database $nome_db\n");
[modifica] mysql_query
Ci siamo connessi al server SQL e abbiamo selezionato con successo il database. Ora possiamo inviare le query SQL che preferiamo, che verranno eseguite normalmente dal server, tramite la funzione mysql_query. Esempio, sulla riga degli esempi precedenti consideriamo una query che inserisca nella tabella "utenti" del database "forum" un nuovo utente, dati username, password e email:
$query = "insert into utenti(username,password,email) values('mio_utente','mia_pass','mia_email')"; $result=mysql_query ($query) or die ("Impossibile eseguire la query: ".mysql_errno().": ".mysql_error()."\n");
Ed ecco che la nostra query è stata eseguita. La funzione mysql_query ritorna il risultato della query, che in questo caso viene salvato nella variabile $result.
[modifica] Leggere i risultati di una query
Interagire con un database non vuol dire solo inserire o modificare dati: vuol dire anche effettuare interrogazioni ed esaminare i risultati. Per fare ciò, PHP mette a disposizione la funzione mysql_fetch_array, che prende come parametri
- Il risultato di mysql_query da analizzare
- Il tipo di array che si vuole ottenere
e ritorna il risultato della query, riga per riga, in un array. L'array ritornato può essere di due tipi fondamentalmente:
- MYSQL_ASSOC: In questo caso i risultati della query vengono salvati in un array numerato in base al nome dei campi del database. Se ad esempio seleziono nella mia query i campi "username" e "password" dalla tabella "utenti", la mysql_fetch_array mi ritornerà un array avente come indici i campi "username" e "password".
- MYSQL_NUM: I risultati della query verranno salvati in un array numerato.
Esempio, sempre sulla riga di quelli precedenti:
$query = "select username,password from utenti"; $res = mysql_query ($query) or die ("Query non corretta\n"); // Finché nel risultato della query sono presenti dei dati... while ($line=mysql_fetch_array($result,MYSQL_ASSOC) { // ...stampa le informazioni lette print "Username: ".$line['username']."\n"; print "Password: ".$line['password']."\n\n"; }
Ed ecco la versione equivalente che fa uso di MYSQL_NUM:
$query = "select username,password from utenti"; $res = mysql_query ($query) or die ("Query non corretta\n"); // Finché nel risultato della query sono presenti dei dati... while ($line=mysql_fetch_array($result,MYSQL_NUM) { // ...stampa le informazioni lette print "Username: ".$line[0]."\n"; print "Password: ".$line[1]."\n\n"; }
[modifica] Chiusura della connessione
È sempre necessario chiudere una connessione ad un database una volta che si è utilizzato. Per deallocare dalla memoria il risultato della query, e quindi liberare risorse, si usa mysql_free_result, mentre invece per chiudere un descrittore di connessione di un database useremo mysql_close:
mysql_free_result ($result); mysql_close ($db);

