Semaine 3 - Jour 3 : CRUD Complet avec PDO

Introduction au CRUD

CRUD signifie Create, Read, Update, Delete - les 4 opérations fondamentales pour manipuler des données dans une base de données. Dans ce cours, nous allons créer une application complète de gestion d'articles avec PDO et MySQL.

Chaque opération CRUD correspond à une requête SQL : INSERT (Create), SELECT (Read), UPDATE (Update), DELETE (Delete). Nous allons apprendre à les sécuriser avec des requêtes préparées et à gérer les erreurs proprement.

1. CREATE - INSERT

Insérer des données

<?php
$sql = "INSERT INTO articles (titre, contenu, auteur, date_creation) VALUES (:titre, :contenu, :auteur, NOW())";

$stmt = $pdo->prepare($sql);

$stmt->execute([
    'titre' => $titre,
    'contenu' => $contenu,
    'auteur' => $auteur
]);

// Récupérer l'ID généré
$id = $pdo->lastInsertId();
?>
Sécurité : Toujours utiliser des requêtes préparées + valider les données avec trim() et empty()

2. READ - SELECT

Lire et afficher les données

<?php
// Lire UN article (fetch)
$sql = "SELECT * FROM articles WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => $id]);
$article = $stmt->fetch(PDO::FETCH_ASSOC);

// Lire TOUS les articles (fetchAll)
$sql = "SELECT * FROM articles ORDER BY date_creation DESC";
$stmt = $pdo->query($sql);
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
Modes de récupération :
• fetch() : Une ligne
• fetchAll() : Toutes les lignes
• FETCH_ASSOC : Tableau associatif

3. UPDATE - Modifier

Mettre à jour des données

<?php
$sql = "UPDATE articles SET titre = :titre, contenu = :contenu WHERE id = :id";

$stmt = $pdo->prepare($sql);

$stmt->execute([
    'titre' => $titre,
    'contenu' => $contenu,
    'id' => $id
]);

// Vérifier combien de lignes modifiées
$nbLignes = $stmt->rowCount();
?>
Attention : TOUJOURS utiliser WHERE avec UPDATE, sinon toutes les lignes sont modifiées !

4. DELETE - Supprimer

Supprimer des données

<?php
$sql = "DELETE FROM articles WHERE id = :id";

$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => $id]);

// Vérifier si supprimé
$nbLignes = $stmt->rowCount();

if ($nbLignes > 0) {
    echo "Supprimé avec succès !";
}
?>
Important : Toujours demander confirmation avant suppression + utiliser POST (jamais GET)
Froggiesplaining :


Objectifs de ce cours :
✅ Maîtriser les 4 opérations CRUD
✅ CREATE : Insérer avec lastInsertId()
✅ READ : fetch() vs fetchAll()
✅ UPDATE : Modifier avec rowCount()
✅ DELETE : Supprimer avec confirmation

Méthodes PDO essentielles :
lastInsertId() : ID du dernier enregistrement inséré
fetch() : Récupère UNE ligne
fetchAll() : Récupère TOUTES les lignes
rowCount() : Nombre de lignes affectées (UPDATE/DELETE)
PDO::FETCH_ASSOC : Retourne un tableau associatif

Sécurité CRUD :
• INSERT : Requêtes préparées + validation trim() et empty()
• SELECT : htmlspecialchars() à l'affichage pour éviter XSS
• UPDATE : TOUJOURS avec WHERE sinon toutes les lignes changent !
• DELETE : Confirmation obligatoire + méthode POST

Bonnes pratiques :
• try/catch sur toutes les requêtes
• error_log() pour enregistrer les erreurs
• Messages génériques pour l'utilisateur
• Vérifier les permissions utilisateur
• Formulaires pré-remplis pour UPDATE
• Considérer la suppression logique (deleted_at) plutôt que physique

Exercice pratique :
1. Créez une table "articles" avec id, titre, contenu, auteur, date_creation
2. Créez create.php pour insérer un article
3. Créez index.php pour lister tous les articles
4. Créez edit.php pour modifier un article
5. Créez delete.php pour supprimer avec confirmation
6. Ajoutez la gestion d'erreurs avec try/catch partout

Froggie explain

GitHub - eCrea