ALCUNE PRECISAZIONI SU PHP e Data Base
Fate riferimento alla figura Client/Server che abbiamo fatto tempo fa alla lavagna: compare il simbolo di
un DataBase. Per ora pensiamo a un database (d’ora in poi DB) come a un archivio e a un software
dedicato per la registrazione, la consultazione e la modifica di dati. Esistono varie implementazioni di DB
(Access, MySQL, Posgresql, Oracle, Informix, DB2, ecc.). Noi useremo Postgres su sistemi Linux.
Linux è un S.O. multiprogrammato, e fra i numerosi programmi che girano insieme ce n’è uno che si
chiama postmaster. Questo programma deve essere attivo, altrimenti non si può usare il database.
Ogni utente Linux può essere promosso a utente di Postgres, e questa promozione la fa l’amministratore.
Supponiamo dunque che l’utente pinco sia anche utente postgres.
Adesso pinco può crearsi un DB, per esempio per inserirci dentro dati anagrafici di persone, dati relativi a
learning e pillole della nostra area di progetto.
Ma come si fa?
Occorre prima capire come è fatto un DB. Lo diremo in modo molto informale, e senza i crismi
dell’informatica teorica.
Nel DB possiamo inserire delle tabelle. Pensiamo a una tabella come a una serie di righe, ognuna delle
quali ha dei campi, un po’ come un file del tipo:
anagrafica
codice
48
70
800
cognome
Garibaldi
Cavour
Magno
nome
Giuseppe
Camillo
Carlo
email
[email protected]
[email protected]
[email protected]
La tabella ANAGRAFICA ha 4 campi, il primo di tipo intero, gli altri stringa.
Si possono poi estrarre dalla tabella alcune righe, per esempio quelle che hanno il campo nome che inizia
per “c”, oppure quelle che hanno codice > 50. Oppure si possono facilmente modificare i campi, come per
es. la e-mail, o, ancora, cancellare righe.
Per creare la tabella nel DB, occorre prima creare il DB stesso, dandogli un nome. In Linux:
$>createdb learning
$>psql learning
Con questo secondo comando entriamo nell’ambiente di gestione testuale del DB. Apparirà il prompt
learning=>
Ora creiamo la tabella anagrafica con il comando seguente (che è uno standard del linguaggio SQL,
cioè un linguaggio che si può usare anche con tutti gli altri DB come oracle, Access, Informix ecc.)
learning=>create table anagrafica (codice int, cognome text, nome text, email text);
Per vedere le tabelle presenti in un DB date:
learning=>\d
oppure
learning=>\d anagrafica
Inseriamo ora dei dati (sempre con comandi standard SQL):
learning=>insert into table anagrafica values (48,’Garibaldi’,’Giuseppe’,’[email protected]’);
Possiamo estrarre ora tutti i dati con:
learning=>select * from anagrafica;
Oppure possiamo estrarne solo alcuni:
learning=>select * from anagrafica where codice > 50;
learning=>select cognome, email from anagrafica where nome=’Camillo’;
Questo, però, è un modo scomodo di operare. Vediamo come si fanno le stesse cose con il WEB e il PHP.
Il codice PHP per interfacciarsi a un DB Postgres
Ecco subito un esempio che consente di estrarre (che è la cosa più facile) dati da un DB.
<?
$PG_HOST="localhost"; // potrebbe essere una anche un ind. IP come 217.123.1.4
$PG_DATABASE="learning";
$PG_PORT="5432";
// 5432 è il port standard su cui è in ascolto postmaster
$PG_USER="pinco";
$PG_PASS="pinco";
$connessione = pg_connect("dbname=$PG_DATABASE host=$PG_HOST port=$PG_POR
T user=$PG_USER password=$PG_PASS");
if (!$connessione) // se qualcosa è andato storto
{
echo "Errore di connessione al database !<br>";
printf("%s", pg_errormessage($connessione)); // al posto di echo uso printf
exit();
}
$query=”select * from anagrafica”;
$res=pg_Exec($connessione,$query);
pg_close($connessione);
$n_righe=pg_NumRows($res);
// istruzione SQL per estrarre dati
//pg_NumRows vi dà il n. di righe di cui si
// compone la tabella risultante $res
for($i=0;$i<$n_righe;$i++)
{
$rec=pg_fetch_Array($res,$i);
echo $rec[codice].” “.$rec[nome].”
echo “<HR>”;
}
“.$rec[cognome].”
“.$rec[email];
?>
Come vedete, il primo passo consiste nel creare una specie di “canale di comunicazione” con il DB, canale
che chiamiamo connessione. Il DB potrebbe anche essere posto su un altro computer, anche distante
migliaia di chilometri, ma, per i nostri scopi, è meglio se lo teniamo sullo stesso server. La connessione tra
PHP e DB, quindi, fa riferimento alla macchina locale. Siccome questa parte è sempre la stessa per
qualsiasi operazione dobbiate poi fare sul DB, conviene metterla in un file di tipo include. Poi vi dirò come.
Il secondo passo consiste nel dire cosa si deve fare sul DB, e dare l’ordine di farlo, ottenendo il risultato in
una variabile (che può anche essere molto grossa) che abbiamo chiamato $res.
Pensiamo a $res come a una tabella da cui dobbiamo tirar fuori tute le righe e stamparne i campi.
Allora, terzo passo, con un ciclo che scandisce la tabella da stampare, tiriamo fuori ciascuna riga
(istruzione pg_fetch_Array). Ogni riga estratta è vista come un vettore, il cui indice può essere o un
numero (da 0 a 3 perché la nostra tabella anagrafica è fatta di 4 campi per ogni riga), o anche il nome del
campo. Strano ma vero. Cose che in C sarebbero fantascienza.
Ecco il risultato a video:
Aggiungete poi effetti grafici in HTML, mettete i dati in una tabella, e avrete maggior soddisfazione !