PHP 6 : Passer à PDO

Bonjour.

Aux dernières nouvelles PHP6 est prévu pour 2009. De nombreuses nouvelles fonctionnalités seront intégrées à PHP. Je vous invite à visiter le blog de Cyril Pierre de Geyer pour une première présentation de ces évolutions. Je reviendrais plus tard sur les diverses nouveautés, mais je souhaite pour le moment aborder un changement majeur de cette version : l’utilisation plus marquée de PDO.

Dans cette nouvelle version de PHP, les fonctions telles que mysql_connect seront toutes déportées dans PECL (un dépôt d’extensions PHP non obligatoires) pour laisser la place à PDO. Ce changement majeur va forcer bon nombre de développeurs à se mettre à jour, et à ne plus utiliser les fonctions de mysql_* au profit de l’extension PDO. Voici donc un petit récapitulatif sur le fonctionnement de PDO.

Qu’est ce que PDO ?

PDO (Php Data Objects) est une interface pour base de donnée permettant d’interragir avec n’importe quelle base de donnée. Cette extension PHP a été intégrée à partir de la version 5.1. PDO fonctionne avec un principe de drivers. Lorsque vous établissez une connexion, vous spécifiez le driver à utiliser.

Exemple d’utilisation avec mysql

-> Etablir une connexion.

<?php

//Driver + nom de la base + hote

<span style="color: #000000;"><span style="color: #0000bb;">$dsn </span><span style="color: #007700;">= </span><span style="color: #dd0000;">'mysql:dbname=VotreDb;host=VotreHote'</span><span style="color: #007700;">;
</span><span style="color: #0000bb;">$user </span><span style="color: #007700;">= </span><span style="color: #dd0000;">'VotreLogin'</span><span style="color: #007700;">;
</span><span style="color: #0000bb;">$password </span><span style="color: #007700;">= </span><span style="color: #dd0000;">'VotrePass'</span><span style="color: #007700;">;</span></span>

try {
$db = new PDO($dsn, $user, $password);
} catch (
PDOException $e) {
echo
‘Connection failed: ’ . $e->getMessage();
}

?>

-> Exécuter une requête :

<span style="color: #000000;"><span style="color: #0000bb;">$db</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">exec</span><span style="color: #007700;">($query) or die(</span><span style="color: #0000bb;">$db</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">errorInfo</span><span style="color: #007700;">());</span></span>

La fonction exec() retourne le nombre de ligne affectée et false dans le cas d’une erreur. Pensez alors à bien utiliser les === pour différencier 0 et false.

-> Exécuter une requête préparée :

Pour exécuter une requête préparée, on peut utiliser la fonction query. PDO Utilise un objet pour gérer les requêtes, il s’agit des PDOStatements. la fonction query() retourne un PDOStatement.

<span style="color: #0000bb;">$db </span><span style="color: #007700;">= new </span><span style="color: #0000bb;">PDO</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$dsn</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$user</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$password</span><span style="color: #007700;">);</span>

$query = ‘SELECT name, colour, calories FROM fruit ORDER BY name’;

<span style="color: #000000;"><span style="color: #0000bb;">$Stmt</span></span>

=

<span style="color: #000000;"><span style="color: #0000bb;">$db</span><span style="color: #007700;">-&gt;<span style="color: #0000bb;">query</span></span><span style="color: #007700;">($</span></span>

query

<span style="color: #000000;"><span style="color: #007700;">);</span></span>

Vous pourrez alors manipuler cet Objet $Stmt via les diverses fonctions de la class PDOStatement, en utilisant notamment les fonctions de manipulation des lignes retournées telles fetch();. Cette fonction vous permettra ainsi de manipuler les résultats sous diverses formes :

<span style="color: #000000;"><span style="color: #0000bb;">$sth </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$db</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">prepare</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"SELECT nom, couleur FROM fruit"</span><span style="color: #007700;">);
</span><span style="color: #0000bb;">$sth</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">execute</span><span style="color: #007700;">();
</span></span><span>//Retourne un tableau associatif</span><span style="color: #000000;"><span style="color: #007700;">
</span><span style="color: #0000bb;">$result </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$sth</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">fetch</span><span style="color: #007700;">(</span><span style="color: #0000bb;">PDO</span><span style="color: #007700;">::</span><span style="color: #0000bb;">FETCH_ASSOC</span><span style="color: #007700;">);</span></span>
<span style="color: #000000;"><span style="color: #007700;">
</span></span><span>//Retourne un tableau indexé numériquement</span><span style="color: #000000;"><span style="color: #007700;">
</span><span style="color: #0000bb;">$result </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$sth</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">fetch</span><span style="color: #007700;">(</span><span style="color: #0000bb;">PDO</span><span style="color: #007700;">::</span><span style="color: #0000bb;">FETCH_NUM</span><span style="color: #007700;">);</span></span>
<span style="color: #000000;"><span style="color: #007700;">
</span></span><span>//Retourne un objet</span><span style="color: #000000;"><span style="color: #007700;">
</span><span style="color: #0000bb;">$result </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$sth</span><span style="color: #007700;">-&gt;</span><span style="color: #0000bb;">fetch</span><span style="color: #007700;">(</span><span style="color: #0000bb;">PDO</span><span style="color: #007700;">::</span><span style="color: #0000bb;">FETCH_OBJ</span><span style="color: #007700;">);</span></span>

Les avantages de PDO

PDO est surement une des interfaces de base de données pour PHP les plus poussées. Sa grande force réside surtout dans son système de pilotes qui vous permettra de changer facilement de base de données sans avoir d’autre modifications à faire que celle du pilote.

La manipulation des données via les PDOStatements est elle aussi des plus intéressantes et vous permettra de gérer les objets obtenus avec une certaine souplesse.

Je vous invite à consulter la documentation sur le site de php et à le tester.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>