Introduction à PDO en PHP
Introduction à PDO en PHP
📖 Introduction
PDO (PHP Data Objects) est une extension native de PHP qui fournit une interface unifiée pour accéder à différents systèmes de gestion de bases de données. Elle permet d’établir des connexions, d’exécuter des requêtes SQL et de récupérer des résultats de manière sécurisée et performante.
L’un des principaux avantages de PDO réside dans son support des requêtes préparées, qui permet de se prémunir efficacement contre les injections SQL tout en améliorant la lisibilité et la maintenabilité du code.
Dans cet article, nous allons aborder les bases de PDO à travers un exemple concret : la création d’une classe PDO_login, chargée de gérer l’authentification des utilisateurs à partir d’une table spécifique.
📦 Installation / Prérequis / Dépendances
PDO est généralement activée par défaut dans PHP. En revanche, pour interagir avec une base de données MySQL, il est nécessaire d’installer l’extension correspondante.
Linux
sudo apt-get install php-mysql
sudo service apache2 restart
Windows (WampServeur)
Depuis les paramètres de WampServer, rubrique PHP → Extensions, activez l’extension MySQL (php_mysql) puis redémarrez le serveur.
📋 Class PDO_login
La classe PDO_login ajoute une couche d’abstraction au-dessus de PDO afin de centraliser la connexion à la base de données et d’encapsuler les requêtes liées à l’authentification.
Cette approche simplifie l’utilisation de PDO dans le reste de l’application et permet de mieux contrôler les requêtes SQL exécutées.
Le code complet de la classe est disponible en fin d’article.
📑 Les Proprietes
User
private $user = null;
Identifiant de l’utilisateur de la base de données.
Pass
private $pass = null;
Mot de passe associé à l’utilisateur de la base de données.
Db
private $db = null;
Instance de PDO représentant la connexion à la base de données.
Host
private $host = "localhost";
Adresse du serveur de base de données.
Dbname
private $dbname = "MyDataBase" ;
Nom de la base de données utilisée.
⚙️ Les Methodes
Construct
public function __construct(string $user, string $pass) {}
Le constructeur initialise les identifiants nécessaires à la connexion à la base de données.
Connection
public function connection ():bool {}
Cette méthode établit la connexion à la base de données en utilisant les informations fournies au constructeur ainsi que les propriétés $host et $dbname.
Elle retourne true en cas de succès et false en cas d’échec.
public function connection () {
try {
$this->db = null;
$this->db = new PDO(
"mysql:dbname=". $this->dbname.";host=". $this->host,
$this->user ,
$this->pass
);
$this->db->exec("SET NAMES utf8");
$this->db->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC);
return true ;
}catch (PDOException $e){
return false;
}
}
Login
public function login ( string $login , string $pass) {}
Cette méthode encapsule une requête SQL permettant de récupérer un utilisateur à partir de son identifiant (pseudo ou email) et de son mot de passe.
public function login ( string $login , string $pass) {
if ($this->db == null) throw new Exception("Error DB is null");
$requete = $this->db->prepare('SELECT * FROM compte where password = :_pass AND ( pseudo = :_login OR email = :_login ); ');
$requete->execute([
"_pass" => $pass,
"_login" => $login
]);
$reponce = $requete->fetchAll();
return $reponce ;
}
Important
La méthode login() utilise une requête préparée via prepare() afin de se protéger contre les injections SQL.
Toute nouvelle méthode interagissant avec la base de données devrait suivre ce même principe.
🚀 Utilisation
Grâce à la classe PDO_login, l’utilisation de PDO devient simple et lisible. Voici un exemple d’intégration côté application.
<?php
require_once './PDO_login.php';
$dbLogin = new PDO_login('DB_user', 'DB_password');
if ($dbLogin->connection()) {
echo 'Connexion réussie';
$result = $dbLogin->login('login_user', 'pass_user');
var_dump($result);
} else {
echo 'Erreur de connexion';
}
🎯 Conclusion
PDO est un outil central de l’écosystème PHP pour interagir avec les bases de données de manière sécurisée et portable. Son support natif des requêtes préparées et son abstraction des moteurs SQL en font une solution fiable pour la majorité des applications.
L’exemple présenté à travers la classe PDO_login illustre comment structurer l’accès aux données et limiter les risques liés aux injections SQL. Cette approche peut être étendue à d’autres tables et fonctionnalités afin de bâtir une couche d’accès aux données claire et maintenable.
Pour aller plus loin, il est recommandé d’ajouter une gestion des exceptions plus détaillée, un hashage des mots de passe et l’utilisation de variables d’environnement pour les informations sensibles
📜 Code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
require_once "./PDO.php";
$db_login = new PDO_login ("DB_user" , "DB_password");
if ($db_login->connection()) {
echo "OK";
$rep = $db_login->login("login_user", "pass_user");
var_dump($rep);
}
else {
echo "Error";
}
?>
</body>
</html>
<?php
class PDO_login {
private $user = null;
private $pass = null;
private $db = null;
private $host = "localhost";
private $dbname = "MyDataBase" ;
public function __construct(
string $user,
string $pass)
{
$this->user = $user;
$this->pass = $pass;
}
public function connection () {
try {
$this->db = null;
$this->db = new PDO(
"mysql:dbname=". $this->dbname.";host=".
$this->host, $this->user ,
$this->pass
);
$this->db->exec("SET NAMES utf8");
$this->db->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC);
return true ;
}catch (PDOException $e){
return false;
}
}
public function login ( string $login , string $pass) {
if ($this->db == null) throw new Exception("Error DB is null");
$requete = $this->db->prepare('SELECT * FROM compte where password = :_pass AND ( pseudo = :_login OR email = :_login ); ');
$requete->execute([
"_pass" => $pass,
"_login" => $login
]);
$reponce = $requete->fetchAll();
return $reponce ;
}
}
?>