Téléchargement
illégal

PDO : Une autre façon d'accéder à vos bases de données


Introduction

Qu'est-ce que PDO ?


PDO (PHP Data Objects) est une extension PHP qui définit une interface d'accès à une base de données.
Il a en quelque-sorte le même rôle que les fonctions mysql_connect, mysql_query, ...
Il est inclus dans PHP depuis sa version 5.1. Pour la version 5.0, vous pouvez l'obtenir avec l'extension PECL.

Qu'a-t-il de plus que les fonctions mysql_... ?


Son principal avantage est qu'il permet une abstraction pour l'accès aux données.
C'est-à-dire que les fonctions pour exécuter des requêtes et pour récupérer des données sont les mêmes, quelque-soit le serveur SQL utilisé (MySQL, PostgreSQL, ...). Par exemple, si vous passez de MySQL à PostegreSQL, vous n'avez pas besoin de transformer tout votre code comme avec les fonctions mysql_ (mysql_connect serait remplacé par pgsql_connect, mysql_query par pgsql_query, ...).

Mais comme chaque serveur SQL n'exécute pas les requêtes SQL de la même façon, il est possible que vous ayez à réécrire certaines requêtes.

PDO est aussi orienté objet, vous pouvez donc l'étendre et gérer les erreurs avec les exceptions.

Se connecter à votre serveur SQL


C'est la partie la plus simple.
Observez ce code :
<?php       
$pdo = new PDO('mysql:host=localhost;dbname=votre_base', 'utilisateur', 'mot_de_passe');       
?>
J'ai souligné ce que vous pouvez modifier.
  • "mysql" est le nom du driver utilisé. Si vous utilisez PostegreSQL, ça sera pgsql. Pour les autres, rendez-vous ici.
  • "localhost" est l'hôte SQL. C'est le premier argument que vous donnez dans la fonction mysql_connect
  • "votre_base" : c'est le nom de votre base de données. C'est ce que vous mettez dans mysql_select_db.
  • "utilisateur" : le nom d'utilisateur
  • "mot_de_passe" : votre mot de passe

Exécuter une requête sans retour


Qu'est-ce que j'appelle une requête sans retour ? C'est une requête qui ne retourne pas de données. Par exemple, les requêtes qui suppriment, modifient ou insèrent des données. Les requêtes qui retournent des données sont celles qui commencent par "SELECT ...".

Pour ce type de requête, il est préférable d'utiliser la méthode exec(), qui retourne le nombre de ligne affectées.

Regardez cet exemple :
<?php     
require 'sqlconnect.php';     

$sql = 'DELETE FROM accouns WHERE type = "member"';     
$nb = $pdo->exec($sql);     

echo $nb.' membres ont été supprimés.';     
?>
Dans cet exemple, nous supprimons tous les comptes du type "membre" (on conserve donc les "admin" et les "modo"). Comme vous pouvez le voir, la variable $nb contient le nombre de lignes affectées (dans ce cas, supprimées) via notre requête.

Récupérer des données


Pour récupérer les données dans une base de données, nous allons utiliser la méthode query() de la classe PDO. Cette méthode retourne un objet du type « PDOStatement ».

La classe PDOStatement propose une méthode permettant de récupérer ligne par ligne les résultats : fetch().

Nous pouvons lui passer en argument la forme sous laquelle nous souhaitons récupérer les données : un tableau (par défaut), un objet, ... Pour éviter de toujours indiquer sous quelle forme nous souhaitons récupérer les données à l'appel de la méthode fetch(), on peut l'indiquer une bonne fois pour toutes avec la méthode setFetchMode().

Afin de protéger nos requêtes contre les injections SQL, nous utiliserons la méthode quote() de la classe PDO. Elle se chargera d'ajouter les guillemets autour des chaines, et d'éviter les injections en doublant les guillemets à l'intérieur de la chaine.

Pour résumer tout ça, je vous propose de regarder cet exemple :
 1. <?php    
 2. require 'sqlconnect.php';    
 3.    
 4. $sql = 'SELECT * FROM membres';    
 5. $req = $pdo->query($sql);    
 6. while($row = $req->fetch()) {    
 7.     echo '<a href="membre-'.$row['id'].'.html">'.$row['pseudo'].'</a><br/>';    
 8. }    
 9. $req->closeCursor();    
10.?>
Analysons ce script :
Ligne 2 : Nous incluons le script "sqlconnect.php" qui se charge de se connecter à MySQL comme nous l'avons déjà vu plus haut.

Ligne 4 : Nous stockons dans la variable $sql une requête SQL qui permet de récupérer tous les champs de toutes les entrées dans la table "membres".

Ligne 5 : Nous exécutons la requête SQL et stockons le résultat (un objet PDOStatement) dans la variable $req

Ligne 6 : Nous effectuons une boucle pour chaque entrée. Comme je l'ai déjà dit, la méthode fetch() retoure les entrées (lignes) une par une. Lorsqu'il n'y en a plus, elle retourne false donc la boucle s'arrête. L'entrée est stockée dans la variable $row. Cette variable est un tableau qui contient une clé pour chaque champ, et aussi un numéro. Si "id" est le premier champ dans la table, alors nous pouvont le récupérer avec $row[0] et $row['id']. Je préfère utiliser la seconde solution.

Ligne 7 : Ce n'est qu'un simple echo qui fait un lien vers la page de profil de chaque membre. Rien de bien compliquer. J'ai volontairement placer des espaces, sinon CommentÇaMarche.net transforme le HTML en un vrai lien.

Ligne 9 : Nous fermons le curseur car nous n'avons plus besoin de cette variable.

Pour protéger vos requêtes contre les injections SQL avec la méthode quote(), je vous propose de regarder cet exemple :
$sql = 'SELECT * FROM membres WHERE pseudo = '.$pdo->quote($pseudoMembre);

Note


Cette astuce est en rédaction, je n'ai pas le temps de tout sortir d'un coup. Si vous trouvez des fautes, n'hésitez pas à les corriger ou à me les signaler.
Publié par avion-f16 - Dernière mise à jour le 27 mai 2010 à 20:10 par avion-f16
Ce document intitulé « PDO : Une autre façon d'accéder à vos bases de données » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  PDO : Une autre façon d'accéder à vos bases de données
  •  Java - L'API JDBC » Articles : Introduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec...
  •  Accès aux données avec JDBC » Articles : Accès aux données Une fois la connexion à la base de données établie, il est possible de demander des informations sur le nom des tables et le contenu de chaque colonne, ainsi que d'exécuter des requêtes SQL afin de récupérer des informations, d'en...
  •  Connexion à la base de données avec JDBC » Articles : Connexion à la base de données L'API (Application Programming Interface) JDBC, c'est-à-dire la bibliothèque de classes JDBC, se charge de trois étapes indispensables à la connexion à une base de données : la création d'une connexion à la...
  •  PHP - Bases de données » Articles : Php permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
  •  Probleme Base de Donnée Joomla ... (Résolu) » Meilleure réponse: Les zamis, si vous êtes en local, la solution c'est qu'après avoir inséré localhost, root, il faut laisser le champ mot de passe vide, car par défaut, la base de donnée n'a pas de mot de passe. c'est tt
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
PHP - Tester la connexion à internet
PHP - Changer un "bonjour" en "bonsoir" et inversement