Rapide tuto sur l'extension PDO désormais incluse dans les nouvelles versions de PHP (depuis la 5.1 me semble-t-il). Qu'est-ce-que PDO ? C'est une extension qui permet de fournir une interface d'abstraction à l'accès de données, ce qui signifie que l'on utilise les mêmes fonctions pour exécuter des requêtes ou récupérer les données quelque soit la base de données utilisée.

On va vite voir comment mettre ça en place :

Avant toute chose, et comme nous avions l'habitude de le faire dans les anciennes versions de PHP, il faut renseigner les informations du serveur et de la base de données.

<?php
$login = 'login';
$mdp = 'mdp';
// Pour MySQL :
$bdd = 'mysql:host=localhost;dbname=mabase';
// Pour SQLite :
$bdd = 'sqlite:/chemin_vers_fichier_de_configuration';
// Pour PostgreSQL
$bdd = 'pgsql:host=localhost port=4444 dbname=mabase user=login password=mdp';
// Pour Oracle
$bdd = 'OCI:dbname=mabase', 'login', 'mdp';
?>

Rien de difficile à comprendre. Le seul problème réside dans la syntaxe, que l'on a pas l'habitude de voir. Ensuite vient la connexion à la bdd.

<?php
$login = 'login';
$mdp = 'mdp';
$bdd = 'mysql:host=localhost;dbname=mabase';
try {
$cnx = new PDO($bdd, $login, $mdp);
}
catch (PDOException $error) {
die("Erreur de connexion : " . $error->getMessage() );
}
$cnx = null; // Fermeture de la connexion
?>

Pour ceux qui n'ont pas l'habitude de gérer les exceptions de cette manière, avec try et catch, je vous renvois à la documentation PHP disponible ici : www.php.net. Et maintenant, intéressons nous aux requêtes. Concernant les requêtes les plus utilisées, PDO distingue deux types de requêtes : les requêtes renvoyant un résultat (SELECT...) et les requêtes ne renvoyant pas de résultat (INSERT...). Cette distinction n'était pas présente dans les versions antérieures de PHP (mysql_query était utilisé pour tout type de requête). Voyons comment PDO gère ceci :

<?php
$login = 'login';
$mdp = 'mdp';
$bdd = 'mysql:host=localhost;dbname=mabase';
try {
$cnx = new PDO($bdd, $login, $mdp);
}
catch (PDOException $error) {
die("Erreur de connexion : " . $error->getMessage() );
}
// Requête sans renvoi de résultat
$req = "INSERT INTO clients (pseudo, mail) VALUES ('toto, 'toto@gmail.com')";
$cnx->exec($req);
// Requête avec renvoi de résultat(s)
$req = "SELECT * FROM clients";
$res = $cnx->query($req);
$cnx = null; // Fermeture de la connexion
?>

Il est bon de noter qu'en cas d'erreur, les fonctions exec() et query() renvoient FALSE.

Maintenant que nous avons sélectionné nos enregistrements, il faut les récupérer. Nous avions l'habitude des mysql_fetch_array, mysql_fetch_object... Avec PDO, nous ne sommes pas dépaysés, mais la syntaxe est différente. Là voici :

<?php
$login = 'login';
$mdp = 'mdp';
$bdd = 'mysql:host=localhost;dbname=mabase';
try {
$cnx = new PDO($bdd, $login, $mdp);
}
catch (PDOException $error) {
die("Erreur de connexion : " . $error->getMessage() );
}
// Requête sans renvoi de résultat
$req = "INSERT INTO clients (pseudo, mail) VALUES ('toto, 'toto@gmail.com')";
$cnx->exec($req);
// Requête avec renvoi de résultat(s)
$req = "SELECT * FROM clients";
$res = $cnx->query($req);
while ($row = $res->fetch(PDO::FETCH_NUM)){}
// PDO::FETCH_NUM renvoie un tableau avec des clefs numériques.
// PDO::FETCH_ASSOC renvoie un tableau associatif.
// PDO::FETCH_BOTH renvoie un tableau associatif avec des clefs numériques.
// PDO::FETCH_OBJ renvoie une instance de stdClass.
$cnx = null; // Fermeture de la connexion
?>

J'ai mentionné dans l'exemple les constantes les plus utilisées, il y a en tout 17 méthodes permettant de "récolter" les enregistrements d'une base de données.

Nous arrivons au terme de ce tutoriel d'initiation à PDO. J'espère qu'il vous servira dans vos futurs scripts PHP ;)

Pour de plus amples informations à propos de PDO, je vous renvois à la documentation PHP, comme a son habitude, très bien expliquée. Rendez-vous ici : www.php.net