📘 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() et exec()
  • Requêtes préparées avec prepare() et execute()
  • Récupération des données avec fetch() et fetchAll()
  • 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.