📘 Chapitre – Interaction simple avec la base de données via PDO
1. 🎯 Objectif pédagogique
Apprendre à effectuer des requêtes SQL simples (SELECT, INSERT, UPDATE, DELETE) via l’extension PDO dans un contexte orienté objet.
2. 📚 Concepts abordés
- Connexion sécurisée avec PDO
- Requêtes simples avec
query()
etexec()
- Requêtes préparées avec
prepare()
etexecute()
- Récupération des données avec
fetch()
etfetchAll()
- Gestion des exceptions et bonnes pratiques
3. 🧠 Explication théorique
PDO (PHP Data Objects) est une interface qui facilite la connexion et l’exécution de requêtes sur différentes bases de données. Exemple de connexion :
try {
$pdo = new PDO('mysql:host=localhost;dbname=blogdb;charset=utf8', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
Exemple de SELECT :
$stmt = $pdo->query("SELECT * FROM articles");
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
4. 🛠 Tutoriel pratique
Résumé du travail : Mettre en place une classe Database
et exécuter quelques requêtes via PDO.
Arborescence projet :
projet_poo_pdo/
├── Database.php
└── test_pdo.php
Étape 1 : Créer la classe Database
<?php
class Database {
private $host = "localhost";
private $db_name = "blogdb";
private $username = "root";
private $password = "";
public $conn;
public function getConnection() {
$this->conn = null;
try {
$this->conn = new PDO(
"mysql:host=" . $this->host . ";dbname=" . $this->db_name . ";charset=utf8",
$this->username,
$this->password
);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Erreur de connexion : " . $e->getMessage();
}
return $this->conn;
}
}
Étape 2 : Exécuter un SELECT
<?php
require 'Database.php';
$db = (new Database())->getConnection();
$stmt = $db->query("SELECT * FROM articles");
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($articles as $article) {
echo $article['titre'] . " - " . $article['auteur'] . "<br>";
}
Étape 3 : Insérer un nouvel enregistrement
$sql = "INSERT INTO articles (titre, contenu, auteur) VALUES (:titre, :contenu, :auteur)";
$stmt = $db->prepare($sql);
$stmt->execute([
'titre' => 'Nouveau post',
'contenu' => 'Ceci est un article ajouté via PDO.',
'auteur' => 'Admin'
]);
Étape 4 : Mettre à jour un enregistrement
$stmt = $db->prepare("UPDATE articles SET auteur = :auteur WHERE id = :id");
$stmt->execute(['auteur' => 'Alice', 'id' => 1]);
Étape 5 : Supprimer un enregistrement
$stmt = $db->prepare("DELETE FROM articles WHERE id = :id");
$stmt->execute(['id' => 2]);
5. 🧾 Résumé et points-clés
- PDO simplifie les interactions avec la base de données et offre une sécurité accrue.
prepare()
+execute()
évite les failles d’injection SQL.fetch()
récupère une ligne,fetchAll()
récupère toutes les lignes.- Le regroupement dans une classe
Database
facilite la maintenance et la réutilisation.