Introduzione all' estensione PDO per PHP5.1
andr3a 14 / 07 / 2005


Cos'e' PDO ?
PDO e' un' estensione in grado di pilotare database di diverso tipo tramite un' unica interfaccia ( o meglio classe ) che con gli stessi metodi opera su mysql, mysql 4.x, sqlite 2.x, sqlite 3.x , PostgreSQL, sqlserver, oracle e chi piu' ne ha piu' ne metta.
Solitamente questo tipo di classe, che racchiude un insieme di sotto classi trasparenti per l'utente, viene definito layer di astrazione.
Parlando di PDO parliamo di PHP 5 e parlando di PHP 5 parliamo di programmazione ad oggetti, quindi se sapete poco / niente della OOP di php vi consiglio di leggere gli articoli di http://freephp.html.it e di documentarvi un po' prima di continuare a leggere.

Perche' PDO ?
PDO e' utile, indispensabile, per rendere un applicativo portabile su diverse piattaforme e diversi databases .
E' quello che mancava al php e che in tanti hanno tentato di creare, una classe per tutti i databases ... e finalmente ecco che l' evoluazione PECL e' diventata sufficientemente stabile per includere questa estensione nella futura versione del php, la 5.1 .
E' gia' presente, ovviamente, nella attuale distribuzione della 5.1 beta 2 , presente sul sito www.php.net .

Differenze sostanziali dal solito "_connect" e "query" ?
Le differenze maggiori sono date dal fatto che si usano oggetti, quindi se programmavate gia' ad oggetti non ce ne sono a livello di sintassi.
A livello concettuale invece, si utilizza un' insieme di operazioni ormai standard o comuni per molti linguaggi, in grado di preparare query, eseguire transazioni, ricevere errory di eccezione ed altro ancora.
Una pillola interessante che puo' fornire sufficiente conoscenza dei concetti e della sintassi che andremo ad utilizzare e' quella che parla di PHP5 e dell' estensione MySQLI.
Se l' avete gia' letta andiamo avanti, altrimenti dategli un' occhiata poiche' vengono spiegate bene i vari metodi per prendere o inserire informazioni in modo sicuro.
Ecco il link: http://forum.html.it/forum/showthrea...hreadid=624870


PDO dalla a alla z
Installazione
A differenza di quanto e' riportato sul manuale, una volta installato PHP 5.1 beta 2 o 5.1 che sia , dovrete semplicemente aggiungere alle estensioni utilizzate quelle relative al pdo ed il database che si vuole gestire.
Non serve quindi mettere la riga seguente:
extension=php_pdo.dll
poiche' il file non e' nemmeno presete in questa distribuzione.
Bastera' mettere direttamente le estensioni che ci interessano, ovvero queste:
codice:
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
Ovviamente se volete usare altri database potete aggiungere le restanti:
extension=php_pdo_firebird.dll
extension=php_pdo_mssql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
Riavviate Apache e vedete se nel phpinfo(); c'e' una o piu' parti inerenti il driver PDO e relative versioni.

Costruttore di un oggetto PDO
Codice PHP:
$mypdo = new PDO$string_dsn [, $string_username [, $string_password [, $array_driver_options]]] ); 
$string_dsn => la stringa che indica il tipo di database e l' host con o senza porta / file da utilizzare
Alcuni esempi:
Codice PHP:
$string_dsn 'mysql:host=localhost;dbname=test'// mysql
$string_dsn 'sqlite:myfile.sqlite'// sqlite 
Tutti gli altri esempi di come impostare il dns li trovate qui: http://it2.php.net/manual/it/function.pdo-construct.php
$string_username => l' utente con la quale volete connettervi, esempio 'root'
$string_password => l' eventuale password di connessione al database
$array_driver_options => Un array con coppie chiavi=>valorei specifici per la connessione di questo oggetto / database.

Il metodo migliore per gestire una connessione al database e' il try catch, dove sul catch PDO ha la sua eccezione dedicata:
Codice PHP:
try {
    
$mypdo = new PDO($dns$user$pass);
}
catch(
PDOException $e) {
    echo 
'Errore di connessione: '.$e->getMessage();

Se non abbiamo errori la variabile $mypdo sara' da quel punto in avanti la variabile di riferimento per la gestione del database.