Connexion à une base de données avec PDO
Objectifs pédagogiques
- Comprendre l’intérêt de PDO.
- Se connecter à une base de données de manière sécurisée.
- Gérer les erreurs de connexion.
Pourquoi PDO ?
PDO (PHP Data Objects) est une extension orientée objet qui fournit une interface unifiée pour accéder à différentes bases de données (MySQL, PostgreSQL, SQLite…).
Avantages principaux :
- Compatible avec plusieurs moteurs de base de données.
- Supporte les requêtes préparées (protection contre les injections SQL).
- Intègre une gestion fine des erreurs via exceptions.
Connexion à MySQL avec PDO
Exemple minimal
php
<?php
$host = 'localhost';
$dbname = 'todo_db';
$user = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $password);
echo "Connexion réussie";
} catch (PDOException $e) {
echo "Erreur de connexion : " . $e->getMessage();
}Explication
PDO(...): instancie un nouvel objet PDO avec les informations de connexion.- Le DSN (
Data Source Name) commence parmysql:suivi du nom d'hôte, de la base, et du charset. - L’exception
PDOExceptionest levée si la connexion échoue.
Connexion à SQLite avec PDO
Exemple minimal
php
<?php
$path = __DIR__ . '/database.sqlite';
try {
$pdo = new PDO("sqlite:$path");
echo "Connexion réussie à SQLite";
} catch (PDOException $e) {
echo "Erreur de connexion : " . $e->getMessage();
}Explication
sqlite:$path: le DSN (Data Source Name) commence parsqlite:suivi du chemin du fichier SQLite.- Le fichier sera créé automatiquement s’il n’existe pas encore (à condition que le dossier soit accessible en écriture).
- L’objet
$pdopeut ensuite être utilisé comme pour MySQL (requêtes, transactions, etc.). - L’exception
PDOExceptionest levée si une erreur se produit.
💡 Idéal en développement : pas besoin de serveur, tout tient dans un fichier.
Activer le mode exception
Par défaut, PDO ne lève pas d’erreur. Pour améliorer le debug et la robustesse :
php
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);À ajouter juste après la création de l’objet PDO.
Sécuriser les identifiants
Il est recommandé de stocker les identifiants de connexion dans un fichier à part (ex. .env ou config.php), puis d’y accéder :
php
// config.php
return [
'host' => 'localhost',
'dbname' => 'todo_db',
'user' => 'root',
'password' => '',
];php
// db.php
$config = require 'config.php';
try {
$pdo = new PDO(
"mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8",
$config['user'],
$config['password']
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Erreur de connexion : " . $e->getMessage());
}Bonnes pratiques
- Toujours attraper les exceptions.
- Ne jamais stocker d'identifiants dans le code source principal.
- Utiliser
utf8(ouutf8mb4) pour éviter les problèmes d'encodage. - Centraliser l’accès à la base dans un seul fichier (éviter les doublons de connexion).