| 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 : Pilotes PDO (php.net)
lien : Quels sont les pilotes de SGBD disponibles avec PEAR::MDB2 ?
|
| 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
$db = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$db ->setAttribute (PDO: : ATTR_CASE, PDO: : CASE_LOWER);
$db ->setAttribute (PDO: : ATTR_ERRMODE , PDO: : ERRMODE_EXCEPTION);
?>
|
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 : Quels sont les pilotes de SGBD disponibles avec PDO ?
lien : Comment exécuter une requête en utilisant PDO ?
lien : Comment construire l'objet $db avec le Zend Framework ?
|
| 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
{
$db = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$db ->setAttribute (PDO: : ATTR_ERRMODE, PDO: : ERRMODE_EXCEPTION);
}
catch (Exception $ e )
{
echo " Échec : " . $e ->getMessage ();
}
?>
|
|
lien : Tutoriel : Exceptions et PHP5, par Guillaume Affringue
|
| 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
$db = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ 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 );
$truncate ->execute ();
$insert ->execute (array (' Yogui ' , ' 1234 ' ));
$insert ->execute (array (' BrYs ' , ' 4321 ' ));
$select ->execute ();
$ 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 : Tutoriel : Exceptions et PHP5, par Guillaume Affringue
|
| 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
$db = new PDO(' mysql:host=localhost;dbname=training ' , ' eric ' , ' motdepasse ' );
$ result = $db ->query (' SELECT * FROM country ' );
$ countries = $result ->fetchAll ();
echo(count($ countries ));
?>
|
|
lien : 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.
|