Lavorare con MySQL Parte Seconda. PHP, dalla versione 4.0, usufruisce difunzioni native per colloquiare con MySQL, senza appoggiarsi ad alcuna libreria o modulo esterno. In questa lezione verranno esaminate le funzioni che occorrono per interfacciarsi con un database MySQL tramite PHP. Connettersi al Server MySQL Le funzioni chiave per predisporre PHP a lavorare con le tabelle di un database MySQL sono le tre : mysql_connect(), mysql_pconnect() e mysql_select_db(). Le prime due sono esclusive, nel senso che bisogna utilizzare ol una o l altra. In seguito vedremo le differenze. mysql_connect() Questa funziona accetta tre argomenti e restituisce un identificativo di connessione (o handle), che deve essere utilizzato per le successive operazioni fornendolo come argomento alle altre funzioni che vederemo più avanti. La sintassi è la seguente : $conn=mysql_connect($host,$user,$password) Le variabili $host, $user e $password contengono i parametri di connessione specificati per l utente che deve connettersi al server mysql. E bene tenere queste variabili in un file separato di estensione.php (e non semplicemente.inc come fanno in molti!!!) per evitare di dover cambiare, in tutti i file che utilizzano una connessione al db, i valori di user e password di connessione, nel caso si abbia necessità di lavorare con utenti differenti, di dover risettare la password etc. Si ricordi di aggiungere l estensione php a tutti i file da includere, per evitare che un utente smaliziato visualizzi il codice sul browser semplicemente collegandosi all indirizzo dovuto. Provate a vedere con Google quanti siti hanno un file db.inc che può essere visualizzato in chiaro e che conterrà probabilmente il nome utente e la password per connettersi al database. mysql_pconnect() E identica a mysql_connect(), ma cambia il modo in cui viene gestita la connessione (che è completamente trasparente al programmatore). Infatti, utilizzando mysql_connect(), la connessione viene rilasciata ad ogni terminazione dello script. Con mysql_pconnect() i risparmia il tempo macchina occorrente a ristabilire una connessione al server MySQL, poiché il collegamento rimane attivo in attesa di una nuova connessione mysql_pconnect(). mysql_select_db() Serve per selezionare il database su cui lavorare. Come argomento accetta il nome del database : mysql_select_db($db); Anche $db è una variabile che dovrebbe essere definita una volta per tutte in un file esterno.
Interrogazioni al database. Se ci sono errori in fase di connessione o di selezione del database, è bene interrompere l esecuzione dello script utilizzando la funzione die(). mysql_select_db($db) or die( DB non selezionato.mysql_error()); mysql_error() riporta l errore avvenuto. Dopo aver effettuato tutte le operazioni sul database, quali selezioni, cancellazioni, update etc., bisogna chiudere la connessione tramite la funzione mysql_close(), che accetta come argomento l handle di connessione : mysql_close($conn); Interrogazioni al database. Per eseguire una query qualsiasi al database selezionato, si utilizza la funzione mysql_query(), che restituisce un recordset, nel caso la query sia di tipo SELECT, che deve essere successivamente scandito per prelevare i singoli record. Tale funzione accetta come argomenti la query da effettuare, di tipo stringa, e l identificativo di connessione precedentemente ottenuto con le funzioni connect. $res=mysql_query($query,$conn); Se la query è di tipo UPDATE o DELETE, si può anche scrivere l istruzione nel seguente modo : mysql_query($query,$conn) or die( Errore :.mysql_error()); Per determinare il numero di righe risultante da una query di selezione, si utilizza la funzione mysql_num_rows(), che accetta come argomento il recordset prelevato e restituisce il numero di record risultante. $righe=mysql_num_rows($res); Accesso alle informazioni Per prelevare le informazioni da un recordset ed effettuare operazioni sui singoli record quali la visualizzazione sul browser, PHP offre tre funzioni, sostanzialmente equivalenti: o mysql_fetch_row() o mysql_fetch_array() o mysql_fetch_object() Se si conosce il numero esatto dei record prelevati, tramite ad esempio la funzione mysql_num_rows(), si può utilizzare un ciclo for per scorrere tutti i record : $num=mysql_num_rows($res); if ($num==0) { print='non ci sono record! ; else { for ($i=1;$i<=$num;$i++) { $row = mysql_fetch_row($res);
$id=$row[0]; $nome= $row[1]; $cognome = $row[2]; $email = $row[3]; print Nome: $nome, Cognome: $cognome <br> ; print Email: $email <br><br><hr> ; // fine for fine else In pratica, la funzione restituisce un record a cui è possibile accedere ai singoli campi semplicemente ricordando la sequenza dei campi prelevati tramite l istruzione SELECT. Quindi, in questo esempio la query era del tipo : $query= SELECT id,nome,cognome,email FROM TblClienti ; Altro tipo di ciclo da effettuare è il seguente : while ($row=mysql_fetch_row($res)) { foreach($row as $field) print <br>$field ; L unica differenza con le altre funzioni di accesso al record è il modo di interpretare il tipo di variabile in cui è contenuto il record prelevato. Con mysql_fetch_array(), $row sarà una sorta di array associativo, a cui è possibile accedere ai singoli campi semplicemente tramite la sintassi $row[nome_campo], mentre mysql_fetch_object interpreta la variabile $row come oggetto, e quindi i singoli campi come proprietà di esso (più avanti nel corso parleremo di oggetti e classi in PHP). Sarà possibile accedere ai singoli campi tramite la sintassi : $row->nomecampo: while ($row=mysql_fetch_array) { print Nome: $row[nome], Cognome: $row[cognome] <br> ; print Email: $row[email] <br><br><hr> ; Oppure : while ($row=mysql_fetch_object) { print Nome: $row->nome, Cognome: $row->cognome <br> ; print Email: $row->email <br><br><hr> ; Un piccolo esempio completo Anche se in seguito si farà un massiccio uso delle funzioni mysql per i nostri script di esempio, riportiamo un piccolo esempio che riporti tutte le funzioni viste fino ad adesso: <?PHP include("corso.inc.php");
Un piccolo esempio completo //connect() è una funzione utente //contenuta in corso.inc.php //effettua la connessione e // seleziona il database //restituendo l'handle di connessione $conn=connect($host,$user,$pass,$db); $query="select * FROM TblClienti WHERE id>2"; $res=mysql_query($query,$conn); $num=mysql_num_rows($res); echo "<TABLE><TR><TD><B>id</B></TD>"; echo "<TD><B>Nome</B></TD><TD><B>Cognome</B></TD>"; echo "<TD><B>Email</B></TD><TD><B>Note</B></TD></TR>\n"; for ($i=1;$i<=$num;$i++) { $row=mysql_fetch_row($res); $id=$row[0]; $cognome=$row[1]; $nome=$row[2]; $email=$row[3]; $note=$row[4]; echo "<TD>$id</TD>"; echo "<TD>$nome</TD><TD>$cognome</TD>"; echo "<TD>$email</TD><TD>$note</TD></TR>\n"; echo "</TABLE>";?> Il contenuto del file corso.inc.php è il seguente : <?PHP $host='localhost'; $user='corso'; $pass='test'; $db='corso'; function connect($host,$user,$pass,$db) { $conn=mysql_pconnect($host,$user,$pass); mysql_select_db($db); return $conn;?> Il risultato ottenuto nel browser all esecuzione dello script è : id 3 Nome Cognome Fabio Verdi Email fverd@tin.it Note Cliente 3 4 Max Neri max@tin.it Cliente 4 5 Joy Gialli joy@tin.it Cliente 5 Come potete osservare, dialogare con un database MySQL in PHP è davvero molto semplice. Nella prossima lezione parleremo delle sessioni, l ultimo elemento indispensabile per costruire un software completo, come un applicazione di commercio elettronico. In seguito, ci sarà una
serie di lezioni che spiegheranno nel minimo dettaglio come programmare un catalogo ed un carrello per un e-shop di un nostro ipotetico cliente. Allo scopo, utilizzeremo l interfacciamento ad un database MySQL e le sessioni. Alla prossima!!?2002 By Domenico Nappo, Domenico Surace e Manuali.net L autore declina ogni responsabilità per eventuali (quanto improbabili) danni recati al sistema per l uso degli script di esempio riportati in questa guida.