6.Le langage PHP
6.15.Utilisation de bases de données avec PHP
6.15.5.PDO: PHP Data Objects
6.15.5.1.Introduction
Il suffit de jeter un oeil aux fonctions et classes permettant d'accéder à une base de données
[c'est quoi?] SQLite
[où?] et MySQL
[où?] pour constater que la façon de coder dépend de la base de données choisie. Cela peut-être génant à plusieurs titres
- Si vous travaillez pour différents projets, avec différentes bases, il faut apprendre comment faire pour chaque base.
- Si vous travaillez sur un projet et voulez laisser l'utilisateur final choisir le type de base de données vous devez réécrire le même bout de code pour les différentes bases.
- Si vous avez opté pour une base de données "modeste" (ex: sqlite) et voulez changer pour une base de données plus pro (ex: mysql) vous aurez a ré-écrire toute la partie d'accès à la base.
|
Heureusement, il existe une solution. Le module
pdo. Ce module permet d'accéder à diverses bases de données avec le même code PHP.
|
- Ceci ne répond que partiellement à la problématique soulevée. Le code PHP est en effet commun aux différents bases mais le code SQL[c'est quoi?] risque de devoir être adapté au cas par cas (sans parler des problèmes liés aux bases ne gérant pas les transactions, etc.)
|
Le module PDO nécessite le recours à la programmation orientée objet
[c'est quoi?].
6.15.5.2.Installation
Il y a fort à parier que le module PDO est déjà activé dans votre environnement. Si ce n'est pas le cas, il suffit d'installer
[comment?] le module
pdo (i.e.
php_pdo.dll sous windows).
En plus du module PDO, il faut installer le module de la base de données (comme indiqué dans le chapitre correspondant à la base).
6.15.5.3.Utilisation
6.15.5.3.1.Introduction
D'une manière générale l'accès à une base de données se réalise en 3 étapes:
- La connexion
- La requête SQL
- La déconnexion
|
6.15.5.4.La connexion et la déconnexion
La connexion est plutôt simple. La connexion se fait lors de l'instanciation de l'objet PDO. En cas d'erreur une exception PDOException est levée.
Le constructeur PDO() attend 1 paramètre obligatoire (une chaîne de caractères, appelée DSN pour Data Source Name - autrement dit Nom de Source de Données - , permettant d'identifier la base de données à laquelle se connecter) et 3 paramètres optionnels: le nom de l'utilisateur, le mot de passe et un tableau d'éventuels autres paramètres.
La structure de la chaîne DSN varie d'une base à l'autre:
- Pour SQLite3, elle prend la forme sqlite:<nom du fichier>
- Pour SQLite2, elle prend la forme sqlite2:<nom du fichier>
- Pour MySQL, elle prend la forme mysql:host=<nom du serveur>;dbname=<nom de la base> on peut également y ajouter port=<numero de port>
|
La déconnexion se fait à la destruction de l'objet soit automatiquement à la fin de l'exécution du script, soit (et c'est préférable) explicitement en affectant la valeur null à l'objet.
La structure d'un script d'accès à une base via PDO est donc la suivante
<?php
require_once("pdo_conf_inc.php");
// Connexion
try {
$bd = new PDO($pdo_dsn, $bd_user, $bd_pwd);
} catch (PDOException $e) {
die("La connexion a la base via la chaine [".$pdo_dsn."] a echouee".
" pour la raison suivante: ".$e->getMessage());
}
// Nous sommes connectes. On peut executer les requetes
// Deconnexion
$bd = null;
?>
pour lequel nous avons créé un script de configuration comme celui-ci (configuré pour SQLite3 mais aisément adaptable à MySQL)
<?php
// Type de base de donnees: mysql, sqlite
$bd_type = "sqlite";
// nom du fichier sqlite
$bd_file = "phpfacile_mabase_pdo.sqlite";
// Serveur hebergeant la base de donnee
$bd_host = null;
// Nom de la base de donnee
$bd_name = null;
// Identifiant de connexion a la base
$bd_user = null;
// Mot de passe de connexion a la base
$bd_pwd = null;
$pdo_dsn = $bd_type.":".
(($bd_type=="sqlite")?$bd_file:
"host=".$bd_host.";dbname=".$bd_name);
?>