Découverte
Étapes de liaison PHP à une base de données
Pour qu'un site web exploite une base de données, différentes étapes peuvent être identifiées :
- Configuration préalable: activation de l'extension PHP
- Connexion à la base de données
- Génération d'une requête SQL en sécurisant les paramètres
- Exécution de la requête
- Récupération du résultat
- Déconnexion de la base de données
Méthodes
PHP propose deux principales extensions pour interagir avec une base de données MySQL :
-
MySQLi (MySQL Improved)
- Extension spécifique à MySQL.
- Supporte les requêtes préparées et l'orienté objet.
- Ne fonctionne qu'avec MySQL, limitant la portabilité.
-
PDO (PHP Data Objects)
- Interface abstraite pour interagir avec plusieurs SGBD (MySQL, PostgreSQL, SQLite, etc.).
- Prise en charge native des requêtes préparées.
- Plus sécurisé grâce à la gestion des transactions et des requêtes préparées.
Dans ce cours, seul PDO sera travaillé. Cependant, n'hésitez pas à consulter les infomrmations concernant mySqli >>
PDO
PDO (PHP Data Objects) fournit une interface d'abstraction à l'accès de données, ce qui signifie que vous utilisez les mêmes fonctions pour exécuter des requêtes ou récupérer les données quelle que soit la base de données utilisée (MySQL, Oracle, ...). PDO ne fournit pas une abstraction de base de données : il ne réécrit pas le SQL ni n'émule des fonctionnalités manquantes.
L'avantage principal de PDO est d'avoir une application indépendante du SGBD. En réalité, cela nécessite également que la syntaxe des requêtes SQL respecte scrupuleusement le SQL standard (commun à tous les SGBD de type SQL).

Installation
PDO et le pilote PDO_SQLITE sont activés par défaut depuis PHP 5.1.0. Si nécessaire, il faut éditer le fichier "php.ini" pour activer le(s) pilote(s) de SGBD désiré(s). Pour MySQL :
Connexion et déconnexion
La connexion s'établit par l'instanciation d'un objet PDO >>
Le protocole détermine le driver à utiliser (mysql:, oci:, sqlsrv:, pgsql:, …) oci :Oracle Call Interface; dblib
Testing
Pour établir la connexion à une base de données MySQL, il faut d'abord s'authentifier sur le serveur de base de données en spécifiant l'url du serveur, son nom d'utilisateur et son mot de passe.
En général, les paramètres de connexion (url, nom d'utilisateur, mot de passe et nom de base de données) sont déclarés comme des constantes dans un fichier séparé.
- Créez un nouveau dossier nommé PDOTesting
- Créez un fichier nommé config.inc.php qui comprendra les constantes suivantes
config.inc.php
- Créez un fichier nommé db_link.inc.php. Ce fichier comprend une classe nommée
DBLink. Cette classe comprend la méthodeconnect2dbqui a comme objectif d'établir une connexion à une base de données MySQL spécifiée par $base et la méthodedisconnectqui a comme objectif de fermer la connexion.
db_link.inc.php
<?php
namespace DB;
require 'config.inc.php';
use PDO;
use PDOException;
/**
* Classe DBLink : gestionnaire de la connexion à la base de données
* @author Vincent MARTIN
* @version 2.0
*/
class DBLink
{
/**
* Se connecte à la base de données
* @var string $base Nom de la base de données
* @var string $message ensemble des messages à retourner à l'utilisateur, séparés par un saut de ligne
* @return PDO|false Objet de liaison à la base de données ou false si erreur
*/
public static function connect2db($base, &$message)
{
try {
$link = new PDO('mysql:host=' . MYHOST . ';dbname=' . $base . ';charset=UTF8', MYUSER, MYPASS);
$link->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
$link->exec("set names utf8");
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
$message .= $e->getMessage() . '<br>';
$link = false;
}
return $link;
}
/**
* Déconnexion de la base de données
* @var PDO $link Objet de liaison à la base de données
*/
public static function disconnect(&$link)
{
$link = null;
}
}
Explications
Méthode connect2db
- Crée un objet PDO avec le Data Source Name (DSN) construit à partir des constantes et de $base
- Configure PDO pour :
- Transformer les noms de colonnes en minuscules (
PDO::ATTR_CASE) - Utiliser l'encodage UTF-8 (set names utf8) - Lancer des exceptions en cas d'erreur (PDO::ATTR_ERRMODEavecPDO::ERRMODE_EXCEPTION). - En cas d'erreur, capture l'exception PDO, ajoute le message d'erreur à $message et retourne false.
- Sinon, retourne l'objet PDO
Méthode disconnect
- Fermer la connexion en attribuant null à l'objet PDO.
- Créez un fichier nommé testDB.php avec le code suivant :
testDB.php
<?php
require 'db_link.inc.php';
use DB\DBLink;
$message = "";
$bdd = DBLink::connect2db(MYDB, $message);
if ($bdd) {
$message .= "Connexion à la base de données réussie!<br>";
} else {
$message .= "Impossible d'établir la connexion à la base de données!<br>";
}
DBLink::disconnect($bdd);
echo "<p>$message</p>";
?>
Explications
Si le message "Connexion à la base de données réussie!" est affiché, félicitation, vous êtes bien connecté à votre BD. Dans le cas inverse, vérifiez le chemin vers le fichier db_link.inc.php, vos informations de connexions...
Explications du code :
- Charge le fichier
db_link.inc.phpqui contient la définition de la classeDBLink(require 'db_link.inc.php';) - La classe
DBLinkappartient à l'espace de nomsDB, donc pour l’utiliser sans écrireDB\DBLink, on l'importe avecuse DB\DBLink; - Déclaration d'une variable qui contenir les messages d'état (succès ou erreur de connexion) (
$message = "";) - Appelle la méthode statique
connect2db()de la classe DBLink ($bdd = DBLink::connect2db(MYDB, $message);) en passant :- MYDB : Nom de la base de données (défini dans config.inc.php)
- $message : Une référence à une variable qui stockera les messages d’erreur ou de succès
$bddcontient un objet PDO si la connexion réussit, sinonfalse- Si la connexion est établie (pour rappel, $bdd est un objet PDO) (
if ($bdd)), on affiche un message de validation, sinon on affiche un message d'échec. - Appelle
DBLink::disconnect($bdd)pour fermer la connexion en mettant$bddà null.