Chapitre 8Projet DevBlog

PHP + MySQL — PDO et requêtes préparées

Connexion PDO, requêtes préparées et protection injection SQL

Concepts Théoriques

PDO (PHP Data Objects) est la méthode standard pour se connecter à une base de données en PHP. C'est une interface orientée objet qui fonctionne avec MySQL, PostgreSQL, SQLite, et d'autres.

Connexion avec PDO

La connexion se fait en créant un objet PDO avec le DSN (Data Source Name), le nom d'utilisateur et le mot de passe. Mettez cette connexion dans config/database.php et incluez-le dans chaque page.

Options recommandées :

  • ERRMODE_EXCEPTION — lève une exception en cas d'erreur SQL (au lieu de retourner silencieusement false)
  • FETCH_ASSOC — retourne les résultats en tableaux associatifs (par défaut)
  • CHARSET utf8mb4 — supporte les accents et les emojis

Requêtes préparées — OBLIGATOIRE

JAMAIS de concaténation de variables dans une requête SQL. C'est la porte ouverte à l'injection SQL — l'attaque la plus dangereuse :

Mauvais : "SELECT * FROM users WHERE email = '$email'" — un attaquant peut injecter du SQL via $email.

Bon : $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); — la valeur est traitée comme une donnée, jamais comme du SQL.

Les requêtes préparées séparent le SQL des données. La base de données ne peut JAMAIS confondre une valeur avec une commande SQL.

Modes de fetch

  • fetch() — retourne UNE seule ligne (ou false)
  • fetchAll() — retourne TOUTES les lignes dans un tableau
  • FETCH_ASSOC — tableau associatif : $row['title']
  • FETCH_OBJ — objet : $row->title

> Règle absolue : Utilisez TOUJOURS des requêtes préparées. TOUJOURS. Même si la donnée vient de votre propre code. C'est une habitude qui doit devenir un réflexe.