Page 2 : La Gestion de la Base de Données (L’Expertise PDO)
Dans cette page, nous allons décortiquer chaque ligne du fichier database/database.php pour comprendre pourquoi elle est indispensable.
1. Pourquoi PDO au lieu de mysqli ?
PDO est plus moderne, plus sécurisé et surtout, il est orienté objet. Il permet de changer de type de base de données (passer de MySQL à PostgreSQL par exemple) presque sans changer de code.
require_once 'database/database.php': Cette ligne est présente au début de chaque fichier nécessitant un accès SQL. On utiliserequire_oncecar sans ce fichier, aucune requête ne peut fonctionner.
2. Analyse ligne par ligne du code
<?php
// On force le typage strict pour éviter les erreurs bizarres
declare(strict_types=1);
// Utilisation de constantes : elles sont globales et immuables
define('DB_SERVERNAME', '127.0.0.1'); // L'adresse du serveur (localhost)
define('DB_USERNAME', 'valet'); // Votre nom d'utilisateur SQL
define('DB_PASSWORD', 'valet'); // Votre mot de passe SQL
define('DB_DATABASE', 'blog-cfpc-2026'); // Le nom de votre base
try {
// Création de l'objet PDO
// L'argument 'charset=utf8' est CRUCIAL pour ne pas avoir de problèmes avec les accents
$pdo = new PDO(
'mysql:host='.DB_SERVERNAME.';dbname='.DB_DATABASE.';charset=utf8',
DB_USERNAME,
DB_PASSWORD
);
// Configuration des attributs PDO
// 1. Gestion des erreurs : on veut que PHP lève une Exception (erreur fatale)
// si une requête SQL est mal écrite. C'est beaucoup plus facile pour débugger.
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 2. Mode de récupération par défaut : on veut récupérer nos données
// sous forme de tableau associatif (ex: $user['email'])
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
// Si la connexion échoue, on arrête tout et on affiche l'erreur
// En production, on cacherait le message détaillé pour la sécurité
die("<div style='color:red;'>Échec de la connexion à la base :</div> " . $e->getMessage());
}
3. Les Requêtes Préparées : Le Bouclier Anti-Piratage
C’est le concept le plus important. Ne concaténez jamais de variables dans vos requêtes SQL.
Mauvaise pratique (DANGEREUX) :
"SELECT * FROM users WHERE email = '$email'" -> Un pirate peut injecter du code SQL ici.
Bonne pratique (SÉCURISÉ) :
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute([':email' => $email]);
Ici, PDO nettoie automatiquement la variable $email, rendant toute attaque impossible.
4. Conclusion sur la couche de données
Le fichier database.php ne doit être inclus qu’une seule fois par page via require_once. L’objet $pdo devient alors disponible partout dans votre script pour effectuer vos opérations de lecture et d’écriture.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Page 2 : La Gestion de la Base de Données (L'Expertise PDO). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.