PHP e MySQL e MySQLI

PHP e MySQL
E' possibile realizzare delle applicazioni in php appoggiandosi ad un database, quale ad esempio MySQL. Con le novità introdotte ai tempi di MySQL 4.1 il team di PHP ha sviluppato una nuova API (insieme di funzioni) che permette a PHP di interagire con MySQL, contenuta in una estensione chiamata mysqli (mysql improved). Tale estensione si affianca quindi alla più vecchia estensione mysql, estendendone le funzionalità ed introducendo anche un'interessante interfaccia ad oggetti. Se si vogliono provare le nuove caratteristiche di MySQL 5 dovrete installare l'estensione mysqli mentre se vorrete testare la compatibilità di script PHP di non recente realizzazione l'estensione mysql farà al caso vostro. E' comunque possibile installarle entrambe.
Vi rimando comunque alla guida di MySQL per ulteriori approfondimenti sui database e alla guida di Apache per la sua configurazione per MySQL 5.
Nel PHP ci sono quindi delle funzioni native riservate proprio alla gestione di applicazioni su database. Di seguito sono mostrate le funzioni relative alla vecchia estensione di MySQL "mysql_" visto che su molti server web è ancora installata la versione del PHP 4.x; potete applicare le stesse funzioni anche alla nuova estensione di PHP5, usando però il suffisso "mysqli_".
page1image11072
mysql_connect(server,nome_utente,password) mysql_connect("localhost:3306","root","")
mysql_close(identificativo_connessione);
mysql_create_db("nome_db");
die();
mysql_error(identificativo_connessione);
mysql_select_db("nome_db",identificativo_connessione);
mysql_query("stringa_query",identificativo_connessione);
mysql_db_query("nome_db", "stringa_query",identificativo_connessione);
Stabilisce la connessione al server MySql.
Chiude la connessione al server MySql.
Crea un database di nome "nome_db".
Funziona come la funzione exit(); , solo che mi consente di fornire una frase in output scritta all'interno delle parentesi.
Cattura gli eventuali errori di MySql e me li fornisce in output. L'identificativo di connessione può essere anche omesso.
Corrisponde al comando use di MySql.
Invia una query al database.
Seleziona il database ed eseguisce la query inviata.

page1image19920
mysql_list_dbs(identificativo_connessione);
mysql_list_tables("nome_db",identificativo_connessione);
mysql_fetch_array("nome_array",MYSQL_ASSOC);
mysql_fetch_assoc("nome_array");
mysql_free_result($risultato);
mysql_num_fields($risultato);
mysql_num_rows($risultato);
mysql_field_table($risultato,identificativo_campo);
mysql_field_type($risultato,$i);
mysql_field_name($risultato,$i);
Elenca tutti i database presenti.
Elenca tutte le tabelle del database passato come parametro.
Riceve come primo parametro un array contenente la query da passare a MySql. Oltre a memorizzare i dati del risultato in un array con indice numerico, questa li memorizza anche con indici associativi usando i nomi dei campi come chiavi. Vedi l'esempio successivo per capire meglio tale associazione.
E' la stessa della precedente.
Libera la memoria occupata dal risultato. Restituisce TRUE in caso di successo, FALSE in caso di fallimento.
Mi restituisce il numero di campi totali della tabella.
Mi restituisce il numero dei records totali.
Mi restituisce il nome della tabella contenente l'identificativo di campo passato come secondo parametro.
Mi restituisce il tipo di campo, quali "int", "real", "string", "bool". I due parametri sono rispettivamente la query e l'identificativo della cella.
Mi restituisce il nome del campo.
Guida scaricata da www.webstyling.it
page2image13512
mysql_field_len($risultato,$i);
Mi restituisce la lunghezza dei caratteri assegnata al campo.

PHP e MySQL: ESEMPI
Vediamo ora qualche semplice esempio di applicazione delle funzioni viste nel paragrafo precedente; in primo luogo vediamo come realizzare una applicazione php che si colleghi al database, printi l'identificatvo della connessione ( esso è un numero che identifica la connessione esistente tra il vostro client ed il server di mysql ) e poi che la chiudi.
<?php
$connessione = mysql_connect("localhost","root","") or die("Connessione non riuscita: ".mysql_error()); print("Identificativo di Connessione : ".$connessione);
mysql_close($connessione);
?>

Di risultato: Identificativo di Connessione : Resource id #14
Di seguito è mostrato un altro esempio: supponendo di avere un database rubrica, con una tabella nomi contenente
appunto solo i nomi, si vuole printare l'elenco di tutti i nomi presenti nel database.
<?php
$connessione = mysql_connect("localhost","root",""); mysql_select_db("rubrica") or die("Selezione del database non riuscita"); $risultato = mysql_query("SELECT * FROM nomi",$connessione); while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC))
{

echo("ID: ".$riga['id']." NOME: ".$riga['nome']."<br>"); }
mysql_free_result($risultato); mysql_close($connessione); ?>
Ad esempio il risultato potrebbe essere:
ID: 1 Nome: Andrea ID: 2 Nome: Sara ID: 3 Nome: Marco ID: 4 Nome: Salvo
Le chiavi passate nell'array $riga devono essere scritte esattamente ( maiuscolo/minuscolo ) come sono state scritte in MySql, altrimenti la query non funziona. Vediamo ora in dettaglio la funzione mysql_fetch_array, a cui viene passato come parametro MYSQL_ASSOC: essa mi ricostruisce in maniera ricorsiva l'array $riga associato al risultato della query mysql nel seguente modo:
Array( ['id']=>1,
['nome']=>"Andrea" );
page3image16024
Alla seconda iterazione del ciclo while, ovviamente i valori cambierebbero.

page3image17560
Vediamo ora come printare i risultati di una query in una tabella realizzata con il semplice codice HTML, nel caso in cui si ha a che fare con una tabella studenti di un database chiamato università:
<?php
$connessione=mysql_connect("localhost","root","")); mysql_select_db("uni") or die("Selezione del database non riuscita"); $query="SELECT * FROM studenti";
$risultato = mysql_query($query) or die("Query non valida: ".mysql_error()); print("<table border=1 height=50% width=50% bgcolor=#66CCFF>\n"); while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC))
{

print("\t<TR>\n"); foreach($riga as $key=>$val) {
print("\t\t<TD>$val</TD>\n"); }
print("\t</TR>\n"); }
print("</TABLE>\n"); mysql_close($connessione); ?>
\t serve per inserire uno spazio di tabulazione, mentre \n per andare a capo; queste tabulazioni saranno visibili solo nel codice HTML della pagina visualizzata nel browser (Visualizza -> HTML dal menù del browser), e non servono per la formattazione della tabella di output.
Il cui risultato è il seguente:
Tutti gli esempi di sopra sono stati realizzati usando la libreria "mysql" comune anche alle vecchie versioni del PHP, mentre nella pagina seguente vedremo l'uso della libreria "mysqli".

PHP e MySQL: ESEMPI - USO DELLA LIBRERIA MYSQLI
Ora vediamo gli stessi esempi visti nella precedente pagina, usando però la nuova libreria del PHP 5: mysqli. La novità introdotta da mysqli sta sicuramente nel fatto che questa libreria può essere usata sia con un normale approccio procedurale (troviamo quindi le stesse funzioni di "mysql_") e sia con un approccio ad oggetti, in quanto nel PHP 5 viene introdotta la classe mysqli, che si occupa proprio della connessione e dell'eseguimento di query su di un database MySQL attraverso il PHP, e della classe mysql_result che si occupa invece della gestione dei risultanti di una query. Scorrendo quindi le funzioni native e procedurali del PHP possiamo trovare una corrispondenza con le proprietà di queste classi; per cui alla vecchia funzione "mysql_query", ora corrisponde la funzione "mysqli_query" e il metodo equivalente "mysqli::query".
Per questo motivo di seguito sono mostrati gli stessi esempi sia con un approccio "procedurale" e sia con un approccio ad oggetti.
Approccio procedurale
Di seguito è mostrato l'uso delle funzioni necessarie per la connessione e relativa chiusura.
<?php
$connessione = mysqli_connect("localhost","root","","dbtest") or die("Connessione non riuscita: ".mysqli_connect_error()); print("Identificativo di Connessione : ".$connessione);

1
page4image29736 page4image29896 page4image30976
Andrea
page4image32864 page4image33024 page4image33344 page4image33928 page4image35008
page4image35736 page4image36160
De Pippis
page4image38792 page4image39272
2
Sara
Ricci
3
page4image54784 page4image54944 page4image55264 page4image56168 page4image56592 page4image56912
Marco
page4image58800 page4image58960 page4image59280 page4image60024
page4image60792 page4image61752
Depaolis
page4image63904 page4image64544

page4image65272

mysqli_close($connessione); ?>
Di seguito, invece, è mostrato un altro esempio: supponendo di avere il solito database rubrica, con la tabella nomi contenente appunto solo i nomi, si vuole printare l'elenco di tutti i nomi presenti nel database.
<?php
$connessione = mysqli_connect("localhost","root","","rubrica"); if (mysqli_connect_errno()) {

echo("Errore durante la connessione al server MySQL");
exit(); }
else {
echo("Connessione effettuata con successo");

}
$risultato = mysqli_query("SELECT * FROM nomi",$connessione); while($riga=mysqli_fetch_assoc($risultato))
{

echo("ID: ".$riga['id']." NOME: ".$riga['nome']."<br>"); }
mysqli_free_result($risultato); mysqli_close($connessione); ?>
Da questi esempi, possiamo vedere che le funzioni sono essenzialmente le stesse di quelle della libreria mysql, con l'unica differenza sostanziale che mysqli_connect riceve come parametro anche il nome del database e l'eventuale porta di connessione e la funzione mysqli_fetch_assoc ritorna direttamente un array "associato" (cioè contenente i nomi dei campi come chiavi e come valori di questi, i valori effettivi contenuti nel database).
Approccio procedurale
Vediamo direttamente l'ultimo esempio più completo, introducendo il concetto di classe o oggetto (vi rimando alla pagina della guida per approfondimenti in merito).
<?php
$mysqli = new mysqli("localhost','root','','rubrica'); if (mysqli_connect_errno()) {

echo("Errore durante la connessione al server MySQL");
exit(); }
else {
echo("Connessione effettuata con successo");

}
$risultato = $mysqli->query("SELECT * FROM nomi"); while($riga = $risultato->fetch_assoc())
{

echo("ID: ".$riga['id']." NOME: ".$riga['nome']."<br>"); }
$risultato->close(); $mysqli->close(); ?>
Da notare il differente modo di richiamare le funzioni, tipico proprio di un approccio ad oggetti, identificato dalla prima riga del codice (istanza della classe mysqli). Altra differenza è il modo in cui viene liberata la memoria dalla variabile $risultato: la funzione close() corrisponde infatti alla vecchia mysql_free_result()

Guida scaricata da www.webstyling.it

Commenti