giovedì 16 settembre 2010

PHP e MySQL: le funzioni per il database

PHP e MySQL, entrambi prodotti open source, hanno sempre avuto un buon rapporto. Recentemente PHP ha aperto la porta anche ad altri database, aggiungendo per ognuno di essi un modulo. Il supporto di PHP verso MySQL rimane in ogni caso la strada più naturale per favorire l'integrazione di un database all'interno di un'applicazione web. Il modulo MySQL per PHP va abilitato all'interno della configurazione del server web (che per Apache2 avviene nel file /etc/php5/apache2/conf.d/mysql.ini). Questo ci permetterà l'accesso e la gestione del database attraverso l'uso di semplici istruzioni!
Prima di iniziare a interagire con un database occorre stabilire una connessione verso un server MySQL, ecco l'utilità della funzione mysql_connect($host,$user,$password). Dove:
  • $host: è il nome o indirizzo del server MySQL, può comprendere anche il numero di porta;
  • $user: è il nome dell'utente che si collega al server;
  • $password: è password assegnata all'utente di nome $user sull'host con nome o indirizzo $host;

Questa funzione restituisce un collegamento alla connessione verso il server MySQL, da usare nelle successive istruzioni. Solitamente a questa istruzione viene fatta seguire l'istruzione die(), che stampa un messaggio ed esce dallo script in caso di errore.

Se vi occorre una connessione persistente verso il database esiste, inoltre, la funzione mysql_pconnect(). Avete mai usato MySQL da riga di comando? La funzione mysql_connect() esegue per voi (in locale o in remoto) l'istruzione mysql -u NOME_UTENTE -p! Il secondo passaggio da compiere consiste nella scelta del database. Se da riga di comando, nel client MySQL, selezioniamo il database con use database NOME_DATABASE, in PHP dobbiamo invece affidarci alla funzione mysql_select_db($database,$connessione). Dove:

  • $database: è il nome del database;
  • $connessione: è il link alla connessione precedentemente ottenuto, in caso di successo, dall'istruzione mysql_connect();

Questa funzione ritorna un valore booleano: true in caso di successo, altrimenti false. Cosa deve accadere se la funzione non trova il database passato come argomento? Nella maggior parte dei casi tutto il codice PHP potrebbe non avere senso. Ecco allora come usare il valore restituito:

Adesso possiamo interrogare il database! Come? Con la funzione mysql_query($query,$connessione). Dove:

  • $query: è la stringa con la query da passare al server MySQL. Può pertanto contenere sia operazioni di inserimento che di modifica. E perché no? Anche istruzioni per la rimozione di occorrenze all'interno delle tabelle che compongono il database. Un limite a queste operazioni è ovviamente stabilito dai permessi dati all'utente che interagisce con il database;
  • $connessione: è il link alla connessione precedentemente ottenuto, in caso di successo, dalla funzione mysql_connect();
Questa funzione ritorna nel caso di SELECT, SHOW, DESCRIBE ed EXPLAIN un oggetto (o meglio, una risorsa) che contiene il risultato generato dalla query. Se la query contiene invece INSERT, UPDATE, DELETE o DROP ritorna true in caso di successo, altrimenti false.

Come possiamo esaminare il risultato restituito da mysql_query?
PHP offre più di una funzione! Prima ancora di andare a leggere il risultato contenuto nella variabile $risposta è forse utile conoscere il numero di righe che troveremo nell'oggetto. L'estrazione delle informazioni contenute in queste righe si esaurisce quasi sempre all'interno di un ciclo (come vedremo fra poco). Meglio stabilire fin dall'inizio se la query ha davvero generato un numero di righe utili, presumibilmente almeno uno! La funzione mysql_affected_rows($connessione) fa proprio questo: legge sulla connessione (quindi, variabile $connessione) il numero di righe generate come risposta all'ultima query di INSERT, UPDATE, REPLACE o DELETE.

Una delle funzioni PHP più usate per l'intercettazione delle informazioni all'interno delle righe ritornate da una query è la funzione mysql_fetch_array($risposta,TIPO_DI_INDIC) che ritorna un array di stringhe, indicizzato sia sui nomi dei campi dati che sugli indici numerici dell'array! Nei parametri passati alla funzione, $risposta è la variabile oggetto generata da mysql_query(), TIPO_DI_INDIC è una costante (opzionale) il cui valore stabilisce come deve essere indicizzato l'array. Può assumere uno di questi valori:
  • MYSQL_BOTH: indicizza l'array sia sui nomi dei campi dati che sugli indici dell'array;
  • MYSQL_ASSOC: indicizza l'array solo sui nomi dei campi dati;
  • MYSQL_NUM: indicizza l'array solo con indici numerici;
La funzione mysql_fetch_array() svolge anche un utile lavoro di scorrimento dell'array stesso. Attraverso un puntatore tiene la posizione dell'ultima riga letta, restituendone i valori a ogni chiamata. Quando non esistono più righe la funzione restituisce il valore false! Tale valore, allora, può essere restituito fin dall'inizio, se la query non genera alcun risultato!

Oppure:
La funzione mysql_fetch_assoc($risultati), a differenza di mysql_fetch_array(), raccoglie i risultati in un array associativo. Indicizzato, cioè, solo sui nome dei campi dati. Qualche volta può verificarsi un errore, perché non stamparlo sul monitor? Le funzioni mysql_errno($connessione) e mysql_error($connessione) ritornano rispettivamente il numero che identifica l'errore e la stringa che lo descrive (sono funzioni da non dimenticare se vogliamo aggiungere all'applicazione un database dedicato ai file di log). Se il nostro script va avanti per diverse righe dichiarando a destra e a sinistra variabili per contenere le risposte alle varie query è preferibile liberare le risorse occupate dalle variabili non più utilizzate con la funzione mysql_free($risultati) (che ritorna true in caso di successo, altrimenti false). A tale proposito, per non tenere sempre impegnate le risorse inutilizzate vi ricordo di chiuedere la connessione se non devono essere esguite sulla stessa altre query. La funzione mysql_close($connessione) chiude la connessione generata all'inizio da mysql_connect() e ora referenziata nella variabile $connessione. Questa deve essere una delle ultime istruzioni, non rimanete connessioni aperte! 
Altre utili funzioni PHP per MySQL sono: mysql_get_client_info() (che ritorna una stringa che descrive il tipo e la versione del client MySQL usato dall'utente che accede alla pagina PHP), mysql_info($connessione) (che ritorna informazioni sull'ultima query eseguita sul server MySQL) e mysql_stat($connessione) (che ritorna informazioni sullo stato del servizio e quindi del server MySQL).

Nessun commento:

Posta un commento