PDO (PHP Data Object) originariamente era un'estensione per PHP in grado di fornire alle applicazioni un'interfaccia portabile per la gestione degli accessi e delle operazioni su diverse tipologie di databases.


Introduzione

PDO sostanzialmente rappresenta un layer di astrazione molto elevato grazie al quale è possibile utilizzare allo stesso modo qualunque database, rendendo di fatto portabile il codice sorgente e le applicazioni che ne fanno uso.

La portabilità è garantita utilizzando driver che, implementando le PDO Interfaces, espongo metodi comuni che incapsulano caratteristiche specifiche e proprietarie di ogni DB utilizzabile.


Ad esempio, utilizzando PDO per eseguire transazioni sarà possibile riutilizzare il medesimo codice sorgente qualora cambiasse la base dati su cui lo script in questione opera.


Questa grande novità è stata introdotta come estensione in PHP 5.0 e dalla versione successiva è stata distribuita all'interno del pacchetto di installazione come feature standard.


A partire dalla release 6 di PHP, l'utilizzo di PDO sarà necessario e obbligatorio per interfacciarsi e lavorare con DB quali MySQL, PostgreSQL e ORACLE.


Installazione

A partire dalla release 5.1 di PHP, PDO è già presente nei pacchetti di installazione, tuttavia per poterlo utilizzare correttamente dovremo agire sul file di configurazione php.ini.

D'altro canto, come sopra riportato, bisognerà indicare quali drivers o estensioni utilizzare per poter garantire all'applicazione la portabilità su DB differenti.


Aggiungere le Estensioni per PostgreSQL, SQLite e MySQL


Per poter utilizzare PDO ad esempio con i databases PostgreSQL, SQLite e MySQL sarà necessario elencare le rispettive dll nella lista delle estensioni presente nella sezione [Dynamic Extensions] del file php.ini:

  • extension=php_pdo_pgsql.dll
  • extension=php_pdo_sqlite.dll
  • extension=php_pdo_mysql.dll

Le dll a cui si fa riferimento devono trovarsi fisicamente all'interno della cartella referenziata dalla proprietà extension_dir presente, anch'essa, all'interno del file php.ini.


PDO e MS Windows


Per gli utenti del sistema operativo Windows i passaggi sopra elencati possono essere svolti comodamente in fase di installazione, scegliendo a priori le caratteristiche desiderate, oppure anche successivamente sempre utilizzando l'eseguibile d'installazione di PHP.


Perché utilizzare PDO ?

PDO rappresenta per PHP ciò JDBC rappresenta nel mondo Java: una unica classe per interfacciarsi a tutti i databases con approccio OOP.

Oltre ai benefici derivanti dalla programmazione ad oggetti (pulizia del codice sorgente, fasi di manutenzione dell'applicazione più snelle ecc..), PDO offre agli sviluppatori comodi metodi per mettere al riparo i dati da SQL injections e per la gestione delle eccezioni.

A tal proposito, PDO è fornito con la propria classe d'eccezione: PDOException.


Esempi

Alcuni esempi per dimostrare il grado di portabilità che PDO è in grado di donare alle applicazioni PHP: eseguiremo la stessa transazione SQL prima utilizzando il database MySQL e successivamente SQLite.

Come potrete vedere l'unica porzione di codice che cambierà sarà la stringa di connessione alla base dati, mentre tutto il resto rimarrà identico in entrambi gli script.


Eseguire una Transazione SQL con PDO e MySQL


$dsn = 'mysql:host=localhost;dbname=test';

try { 
    //Creazione di una nuova istanza della classe PDO
    $mypdo = new PDO($dns, "username", "password"); 
    // inizio la transazione 
    $mypdo->beginTransaction();
 
    // effettuo una o piu' query per la modifica ed inserimento dei dati  
    
    //Consolido lo stato dei dati modificati
    $mypdo->commit(); 
} 

//Se si verifica un'eccezione durante le operazioni su DB la intercetto e gestisco l'errore
catch(PDOException $e) { 
    echo 'Si è verificata un\'eccezione: ' . $e->getMessage();

    //Eseguo rollback per conservare l'integrità dei dati
    $mypdo->rollback(); 
}


Eseguire una Transazione SQL con PDO e SQLite


$dsn = 'sqlite:myfile.sqlite';

try { 
    //Creazione di una nuova istanza della classe PDO
    $mypdo = new PDO($dns, "username", "password"); 
    // inizio la transazione 
    $mypdo->beginTransaction();
 
    // effettuo una o piu' query per la modifica ed inserimento dei dati  
    
    //Consolido lo stato dei dati modificati
    $mypdo->commit(); 
} 

//Se si verifica un'eccezione durante le operazioni su DB la intercetto e gestisco l'errore
catch(PDOException $e) { 
    echo 'Si è verificata un\'eccezione: ' . $e->getMessage();

    //Eseguo rollback per conservare l'integrità dei dati
   $mypdo->rollback(); 
}


Fonti


Articolo a cura di mirkoagrati 15:41, Nov 4, 2009 (CET)


  • Questa pagina è stata modificata per l'ultima volta il 4 nov 2009 alle 16:04.
  • Questa pagina è stata letta 2 984 volte.