Accueil
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence
logo
Sommaire > Bases de données > Abstraction > PDO
        Qu'est-ce que PDO ?
        Quels sont les pilotes de SGBD disponibles avec PDO ?
        Comment installer PDO ?
        Comment savoir quels pilotes sont chargés pour PDO sur mon hébergement ?
        Comment se connecter en utilisant PDO ?
        Comment gérer les exceptions avec PDO ?
        Comment exécuter une requête en utilisant PDO ?
        Comment récupérer le nombre d'enregistrements retournés par une requête 'SELECT' avec PDO ?



Qu'est-ce que PDO ?
auteur : Guillaume Rossolini
PDO (PHP Data Objects) est une extension PHP qui permet d'utiliser une base de données en programmant avec un style orienté objet, et surtout qui permet de s'affranchir du SGBD. PDO n'utilise pas des fonctions au nom trop explicite comme mysql_query() ou sqlite_query(), ce qui facilite grandement la migration d'un SGBD à l'autre, voire l'utilisation simultanée ou alternée de plusieurs SGBD avec le même code PHP.

PDO est une solution d'abstraction de BDD en PHP.

Le Zend Framework (par exemple) utilise PDO pour ses accès BDD.

lien : faq Comment uniformiser l'utilisation de différents SGBD ?
lien : fr Cours et tutoriels Zend Framework
lien : fr La documentation de PDO (php.net)

Quels sont les pilotes de SGBD disponibles avec PDO ?
auteur : Guillaume Rossolini
La documentation officielle tient à jour une liste des pilotes disponibles avec PDO. Chaque pilote est associé à une extension qu'il faut penser à activer dans le fichier php.ini afin de pouvoir l'utiliser.

  • Firebird/Interbase 6 ;
  • FreeTDS / Microsoft SQL Server / Sybase (à ne pas utiliser, module non tenu à jour par Microsoft) ;
  • IBM DB2 ;
  • IBM Informix Dynamic Server ;
  • MySQL 3.x/4.0 ;
  • ODBC v3 (IBM DB2 unixODBC et win32 ODBC) ;
  • Oracle Call Interface ;
  • PostgreSQL ;
  • SQLite 3 et SQLite 2.
lien : fr Pilotes PDO (php.net)
lien : faq Quels sont les pilotes de SGBD disponibles avec PEAR::MDB2 ?

Comment installer PDO ?
auteur : Guillaume Rossolini
PDO est une extension PHP. Il faut installer le pilote PDO générique ainsi que chacun des pilotes de SGBD que l'on souhaite utiliser : chacun d'eux est une extension PHP.

lien : faq Comment installer une extension pour PHP ?

Comment savoir quels pilotes sont chargés pour PDO sur mon hébergement ?
auteur : Guillaume Rossolini
Il faut utiliser le script suivant :
<?php

foreach(get_loaded_extensions() as $extension)
{
    if(strpos(strtolower($extension), 'pdo') !== FALSE)
    {
        echo $extension.'<br/>';
    }
}

?>

Comment se connecter en utilisant PDO ?
auteur : Guillaume Rossolini
La chaîne de connexion varie suivant le pilote SBGD utilisé, mais tout le reste est équivalent d'un SGBD à l'autre.
<?php

// Connexion à la base de données
$db = new PDO('mysql:host=localhost;dbname=developpez', 'Yogui', 'motdepasse');

// Configuration facultative de la connexion
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
$db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions

?>

Voici quelques exemples de chaînes de connexion :
MySQL (TCP)
$db = new PDO('mysql:host=localhost;dbname=developpez', 'Yogui', 'motdepasse');
MySQL (socket)
$db = new PDO('mysql:unix_socket=/tmp/mysql.sock;dbname=developpez', 'Yogui', 'motdepasse');
ODBC (connexion cataloguée dans le Manager)
$db = new PDO('odbc:developpez', 'Yogui', 'motdepasse');
ODBC (IBM DB2)
$db = new PDO('odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;"
."DATABASE=developpez;PROTOCOL=TCPIP;UID=Yogui;PWD=motdepasse;', '', '');
ODBC (MS Access)
$db = new PDO('odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\developpez.mdb;Uid=Yogui', '', '');
Oracle
$db = new PDO('oci:dbname=//localhost:1521/developpez', 'Yogui', 'motdepasse');
Firebird et Interbase
$db = new PDO('firebird:User=Yogui;Password=motdepasse;Database=developpez.gde;DataSource=localhost;Port=3050', '', '');
IBM DB2
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=developpez;HOSTNAME=localhost;PORT=56789;PROTOCOL=TCPIP;", "Yogui", "motdepasse");
Informix
$db = new PDO("informix:host=localhost; service=9800;
    database=developpez; server=ids_server; protocol=onsoctcp;
    EnableScrollableCursors=1", "Yogui", "developpez");
PostgreSQL
$db = new PDO('pgsql:host=localhost port=5432 dbname=developpez user=Yogui password=motdepasse', '', '');
SQLite 3
$db = new PDO('sqlite:/opt/databases/mydb.sq3', '', '');
SQLite 2
$db = new PDO('sqlite2:/opt/databases/mydb.sq2', '', '');
lien : faq Quels sont les pilotes de SGBD disponibles avec PDO ?
lien : faq Comment exécuter une requête en utilisant PDO ?
lien : faq Comment construire l'objet $db avec le Zend Framework ?

Comment gérer les exceptions avec PDO ?
auteur : Guillaume Rossolini
PDO est une extension orientée objet et qui utilise un système d'exceptions. L'instanciation d'un objet PDO doit donc se faire avec un bloc try/catch afin d'éviter des fuites d'information (exemple dans les liens ci-dessous).
<?php

try
{
// Connexion à la base de données
$db = new PDO('mysql:host=localhost;dbname=developpez', 'Yogui', 'motdepasse');

// Configuration du pilote : nous voulons des exceptions
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Obligatoire pour la suite
}
catch(Exception $e)
{
echo "Échec : " . $e->getMessage();
}

?>
lien : fr Tutoriel : Exceptions et PHP5, par Guillaume Affringue

Comment exécuter une requête en utilisant PDO ?
auteur : Guillaume Rossolini
Le plus efficace est d'utiliser les requêtes préparées. Une requête préparée se matérialise dans le code par un "statement" PDO. Un statement peut être exécuté de nombreuses fois avec des paramètres différents.
<?php

// Connexion à la base de données
$db = new PDO('mysql:host=localhost;dbname=developpez', 'Yogui', 'motdepasse');

// Préparation des requêtes
$truncate = $db->prepare('TRUNCATE user');
$insert = $db->prepare('INSERT INTO user (name, password) VALUES (?, ?)');
$select = $db->prepare('SELECT id, name, password FROM user');
$select->setFetchMode(PDO::FETCH_ASSOC); // Facultatif

// Exécution des requêtes
$truncate->execute();
$insert->execute(array('Yogui', '1234'));
$insert->execute(array('BrYs', '4321'));
$select->execute();

// Récupération des résultats
$users = $select->fetchAll();
echo '<pre>';
print_r($users);
echo '</pre>';

?>

Note importante : utiliser des requêtes préparées élimine le risque d'injection SQL et accélère les performances.

lien : fr Tutoriel : Exceptions et PHP5, par Guillaume Affringue

Comment récupérer le nombre d'enregistrements retournés par une requête 'SELECT' avec PDO ?
auteur : Eric POMMEREAU
Sous réserve que les extension php_pdo et php_pdo_mysql (pour cet exemple) soient montées en mémoire.

Contrairement à ce que l'on pourrait croire, la méthode 'rowCount()' ne fonctionne que dans les cas de requêtes de type INSERT, UPDATE ou DELETE.
<?php

// initialisation de la connexion PDO
$db = new PDO('mysql:host=localhost;dbname=training', 'eric', 'motdepasse');

// Exécution de la requête
$result = $db->query('SELECT * FROM country');

// Récupération de tous les enregistrements retourne un tableau
$countries = $result->fetchAll();

// Affichage comptage du nombre de lignes du tableau
echo(count($countries));

?>
lien : faq Comment se connecter en utilisant PDO ?


Consultez les autres F.A.Q.


Les sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2003  Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com