L'extension PHP Data Objects (PDO)
Publié par freshdaz il y a 6 mois
Présentation de PDO
PDO est une interface d'accès aux bases de données. Contrairement aux interfaces d'abstractions comme ADODB ou PEAR DB, cette couche logicielle intégrée à PHP, permet d'accéder directement et de façon uniforme à n'importe quelle base de données parmi celles supportées (MySQL, SQLite, PostgreSQL, Oracle...), sans se préoccuper du moteur qui tourne derrière. Ainsi, le jour où vous décidez de migrer vers une autre base de données, il vous suffit (théoriquement) de modifier le fichier de configuration pour que votre application s'adapte automatiquement sans avoir à toucher à votre code.
PDO permet d' envoyer et récupérer le résultat de requêtes SQL de manière totalement transparente, et de façon plus ou moins avancée (en utilisant les requêtes préparées par exemple).
Les fonctionnalités de PDO
PDO offre la possibilité d'utiliser les requêtes préparées.
PDOStatement PDO::prepare ( string statement [, array driver_options] )
Il est également possible d'utiliser les transactions (commit / rollback).
bool PDO::beginTransaction ( void )
bool PDO::commit ( void )
bool PDO::rollBack ( void )
et de gérer les erreurs SQL
array PDO::errorInfo ( void )
int PDO::errorCode ( void )
Installation (windows)
Le pilote MySQL de PDO est compatible avec MySQL 3.x/4.0. Nous allons donc utiliser : MySQL 4.0.24 et Sqlite 2.8.14, avec PHP version 5.1.0(RC1).
Par défaut, l'extension principale de PDO est intégrée à PHP depuis la version 5.1. Cette extension principale inclut le support de SQLite. Une extension complémentaire sera nécessaire pour chaque type de base de données supplémentaire.
Ainsi, pour ajouter le support de MySQL sous Windows, il faudra ajouter la ligne suivante dans votre php.ini : extension=php_pdo_mysql.dll et redémarrer le serveur Web.
Utilisation au travers d'un exemple simple
Soit une table client :
- CREATE TABLE client (
- nom CHAR( 30 ),
- prenom CHAR( 30 )
- );
Cette table contient 3 enregistrements :
- INSERT INTO client ( nom , prenom ) VALUES ( 'Dasini' , 'Olivier' );
- INSERT INTO client ( nom , prenom ) VALUES ( 'Bourdon' , 'Romain' );
- INSERT INTO client ( nom , prenom ) VALUES ( 'Pierre De Geyer' , 'Cyril');
Première étape, se connecter. Si vous vous êtes déjà connecté à une base de données avec PHP, vous savez que chaque logiciel de base de données à ses propres méthodes de connexions.
Avec PDO, la méthode est la même quelque soit votre base de données, il vous suffit de créer un objet PDO.
PDO PDO::__construct ( string dsn [, string username [, string password [, array driver_options]]] )
Un paramètre obligatoire: le dsn (nom de la source de données),
3 paramètres optionnels: le nom d'utilisateur, son mot de passe et un tableau d'options de connexion tous spécifiques au pilote utilisé.
Paramètres de connexion pour MySQL:
- $db = 'demo'; //nom de la base de données
- $host = 'localhost'; // nom de la machine hôte
- $user = 'root'; // nom de l'utilisateur
- $pwd = '';// mot de passe
Création du DSN MySQL :
Le DSN est formé du nom du pilote PDO (mysql), suivit de deux points (:).
Se suivent ensuite le nom de la base de données et celui de la machine.
A noter qu'il n'est pas possible de spécifier un port. En d'autre terme, il faut que votre serveur MySQL soit installé sur le port par défaut (3306) sinon vous ne pourrez pas vous y connecter.
- $dsn = "mysql:dbname=$db;host=$host";
Création d'une instance PDO :
Ce dsn va maintenant servir de paramètre à la création de notre objet PDO.
- $conn = new PDO($dsn, $user, $pwd);
Exécution d'une requête :
Dernière étape, exécuter nos requêtes. Pour ce faire, on utilise la méthode query de notre objet PDO.
- $sql = "SELECT * FROM client";
- $conn->query($sql);
Pour afficher les données, on peut utiliser la fonction foreach comme ceci :
- $result = $conn->query($sql);
- foreach ($result as $row)
- {
- }
On aura donc à l'écran :
Dasini - Olivier
Bourdon - Romain
Pierre De Geyer - Cyril
Inserer un nouvel enregistrement :
- $sql_mins ="INSERT INTO client ( nom , prenom ) VALUES ( 'n_client1' , 'p_client1' )";
- $conn->query($sql_mins);
Modifier un enregistrement de la table
- $sql_mod = "UPDATE client SET nom='Rasmus', prenom='Lerdorf' WHERE nom='n_client1'";
- $conn->query($sql_mod);
Afficher les données :
- $sql = "SELECT * FROM client";
- $conn->query($sql)
- foreach ($conn->query($sql) as $row)
- {
- }
Ce qui nous donne cette fois :
Bourdon - Romain
Pierre De Geyer
Cyril
Rasmus Lerdorf
Transformons maintenant ce script pour nous connecter à une base de données SQLite respectant la même structure.
Avec le pilote SQLite, le processus est similaire. On n'a cependant pas besoin de noms de serveur ou d'utilisateur, ni de mot de passe, sqlite ne fonctionnant pas sous le modèle client/serveur mais simplement avec des fichiers.
Pour passer notre scripts de MySQL vers SQLite, il nous suffit maintenant de modifier le dsn de notre script.
Création du DSN SQLite:
La encore, le DSN est formé du nom du pilote PDO (sqlite2), suivit de deux points (:).
Ensuite on précise le chemin du fichier base de données.
- $dsn = 'sqlite2:D:/wamp/www/pdo/pdo.db';
Création d'une instance PDO :
- $conn = new PDO($dsn);
Le reste du script n'a pas à être modifié, le résultat final devrait rester le même.