Cours PDO en PDF (Intermédiaire)
PDO (PHP Data Objects). PDO est l'interface d'abstraction permettant à PHP d'ouvrir une connexion, d'exécuter des requêtes SQL et de fermer proprement la liaison avec un SGBD via un DSN et un driver. Son usage réduit le couplage entre le code applicatif et le moteur (MySQL, SQLite, etc.), facilite la gestion des erreurs SQL et permet d'appliquer des mécanismes de sécurité comme les requêtes préparées. Cette ressource est fournie sous forme de PDF gratuit.
🎯 Objectifs pédagogiques
-
Initialiser et gérer une connexion PDO
Construction d'un DSN et instanciation avec
new PDO($dsn, $user, $pass). Limitation du nombre d'instances par exécution, détection et traitement d'une erreur de connexion viaerrorInfopour obtenir une connexion robuste et réutilisable dans une architecture web. -
Différence
exec/query/prepare+executeIdentification des cas d'usage :
execpour les opérations de modification,querypour les lectures simples, etprepare+executepour sécuriser les entrées externes et éviter les injections SQL. -
Protection contre les injections et usage des placeholders
Mise en œuvre pratique des placeholders positionnels et nommés, liaison de paramètres, et rôle de
quoteetbindColumnpour maintenir l'hygiène des données avant persistance. -
Transactions, commit et rollback
Utilisation de
beginTransaction,commitetrollbackpour garantir l'atomicité d'opérations complexes, avec exemples tirés du projet de sondages (méthodesaveSurvey). -
Manipulation de
PDOStatementMéthodes pratiques :
fetch,fetchAll,fetchColumn,rowCount,closeCursor, ainsi que l'interprétation deerrorCodeeterrorInfopour parcourir les jeux de résultats et traiter les erreurs du driver. -
Mapping objet‑relationnel avec Redbean
Initialisation via
R::setup, création et stockage de beans (R::dispense,R::store) et gestion des associations one‑to‑many (champownResponse). Permet de prototyper un ORM léger sans écrire de SQL manuel.
Drivers et SGBD supportés
- MySQL
- PostgreSQL
- SQLite
- MS SQL Server
Drivers et DSN spécifiques
Exemples de formats de DSN courants pour l'initialisation d'une connexion :
- MySQL — format DSN :
$dsn = 'mysql:host=localhost;port=3306;dbname=ma_base;charset=utf8mb4';
$dsn = 'sqlite:/chemin/vers/base.sqlite';
Modes de récupération (Fetch Modes)
Deux modes fréquemment utilisés :
PDO::FETCH_ASSOC— retourne chaque ligne sous forme de tableau associatif (clef => valeur).PDO::FETCH_OBJ— retourne les lignes sous forme d'objets accessibles par propriété.
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$row = $stmt->fetch(PDO::FETCH_ASSOC); // ou PDO::FETCH_OBJ
Activation de l'extension PDO
Vérifier l'activation dans php.ini : décommenter ou ajouter les extensions nécessaires selon votre environnement (ex. extension=pdo_mysql, extension=pdo_sqlite, extension=pdo_pgsql). Après modification, redémarrer le serveur web pour prendre en compte les changements.
📑 Sommaire du document
- PDO
- Les requêtes et fonctions utiles
- Injections SQL
- Base de données du projet
- Mapping objet-relationnel (ORM)
- Redbean – Introduction
- Redbean – Chargement des beans
- Redbean – One-to-many
Configuration et Drivers PDO
La configuration de PDO combine le choix du driver et des attributs d'instance. Parmi les constantes utiles, PDO::ATTR_ERRMODE permet de définir le comportement en cas d'erreur (par exemple PDO::ERRMODE_EXCEPTION pour remonter une exception). PDO::ATTR_DEFAULT_FETCH_MODE définit le mode de récupération par défaut. Adapter ces options améliore la robustesse et la lisibilité du code lors des opérations courantes sur la base.
Sécuriser vos accès SQL avec PDO
L'interface d'abstraction favorise l'indépendance vis‑à‑vis du SGBD : en changeant de driver, le code applicatif reste sensiblement identique si le DSN et les requêtes préparées sont correctement utilisés. L'emploi systématique de requêtes préparées et de placeholders réduit les risques d'injection ; la gestion fine des transactions garantit l'intégrité des opérations en cas d'erreur. Ces pratiques renforcent la sécurité PHP et la portabilité entre moteurs.
💡 Pourquoi choisir ce cours ?
Rédigé par Bertrand Estellon (Aix‑Marseille Université), le document combine démonstrations concrètes et un mini‑projet de sondages illustrant l'application des concepts : transactions, prévention d'injection et ORM. L'approche privilégie des extraits de code exécutables et des bonnes pratiques opératoires pour passer rapidement de preuve de concept à une solution réutilisable.
👤 À qui s'adresse ce cours ?
- Public cible : développeurs web PHP et étudiants en développement back‑end souhaitant fiabiliser l'accès aux bases de données dans des applications réelles (projets de sondages, sites CRUD, API).
- Prérequis : connaissances de base en PHP (variables, fonctions, classes), notions de SQL (SELECT/INSERT/UPDATE/DELETE) et d'orienté‑objet ; familiarité minimale avec l'environnement serveur (
$_SERVER).
❓ Foire Aux Questions (FAQ)
Quand privilégier prepare+execute plutôt que exec ou query ? Pour toute requête intégrant des données externes, utiliser prepare et des placeholders afin de déléguer l'échappement au driver et neutraliser les injections SQL.
Comment gérer proprement les échecs lors d'une série d'inserts dépendants ? Encapsuler les opérations dans beginTransaction, valider avec commit et effectuer rollback en cas d'échec détecté (ex. retour false d'un execute), comme montré dans la méthode saveSurvey de la classe Database du PDF.