Cours PHP : bases de données en PDF (Intermédiaire)
Cours PHP et bases de données : les fondamentaux PHP fournit des fonctions natives pour interagir avec des SGBDR relationnels. Ce document se concentre sur l'usage des primitives MySQL historiques (connexion, requêtes SQL, extraction de résultats et gestion d'erreur) et sur l'organisation de scripts d'accès aux données. L'approche porte autant sur la mécanique des appels (identificateur de résultat, boucles d'extraction) que sur des bonnes pratiques de structuration (fichiers d'inclusion, connexion persistante, usage d'API de haut niveau). Le PDF contient des exemples et des travaux pratiques permettant d'implémenter des scripts réels pour gérer des tables et des opérations CRUD. Bien que centré sur MySQL, les principes SQL restent portables vers PostgreSQL et SQLite, ce qui facilite la réutilisation des exercices.
🎯 Ce que vous allez apprendre
- Connexion aux serveurs MySQL — paramètres requis (hôte, utilisateur, mot de passe, nom de base) et usage des fonctions historiques pour comprendre la mécanique ; structuration d'un fichier d'inclusion pour réutilisabilité de l'identifiant de connexion.
- Envoi et gestion des requêtes SQL — formulation de requêtes (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER) et interprétation des identificateurs de résultat ; vérification systématique du succès des appels côté serveur.
- Extraction des résultats — choix entre représentation indexée, associative ou objet et écriture de boucles robustes qui peuplent structures de données prêtes à l'affichage ou au traitement.
- Fonctions de service et métadonnées — gestion de la mémoire, récupération d'
AUTO_INCREMENTet inspection de la structure d'un jeu de résultats pour éviter les fuites. - Gestion des erreurs et diagnostic — interrogation des codes d'erreur, journalisation adaptée et techniques pour éviter d'exposer des informations sensibles en production.
- Structuration et travaux pratiques — organisation d'une petite application CRUD, scripts d'installation et exercices pour mettre en œuvre les concepts présentés.
📑 Sommaire du document
- Introduction
- Principe
- Connexion
- Interrogation
- Extraction des données
- Fonctions de services
- Traitement des erreurs
- Travaux pratiques
💡 Pourquoi choisir ce cours ?
Support pédagogique concis aligné sur le programme BTS IRIS et orienté opérationnel : extraits de code, sorties d'extraction et travaux pratiques prêts à l'exécution. Rédigé par Thierry VAIRA, formateur BTS IRIS, le document présente des séquences de mise en œuvre immédiate comparables à un tutoriel pratique, avec une attention portée à la rigueur méthodologique et à la reproductibilité des exercices.
👤 À qui s'adresse ce cours ?
- Public cible : développeurs web ou étudiants en BTS/LP souhaitant consolider la pratique d'accès aux bases relationnelles avec PHP historique, construire des scripts CRUD et comprendre la manipulation des jeux de résultats.
- Prérequis : notions de bases de données relationnelles, connaissance de SQL (SELECT/INSERT/UPDATE/DELETE) et maîtrise de la syntaxe PHP de base, ainsi qu'un accès à un serveur LAMP ou environnement équivalent pour exécuter les scripts.
❓ Foire Aux Questions (FAQ)
Quand privilégier mysql_pconnect à mysql_connect ? La connexion persistante peut réutiliser une ressource pour réduire l'overhead d'ouverture mais risque d'épuiser le pool de connexions sur des serveurs à nombreux processus ; mesurer l'impact et surveiller la charge.
Comment récupérer l'identifiant auto-incrémenté après une insertion ? Utiliser mysql_insert_id([$id]) immédiatement après un INSERT pour obtenir la valeur AUTO_INCREMENT générée et lier l'enregistrement inséré à d'autres opérations sans requêtes additionnelles.
Sécurité, bonnes pratiques et PDO
La sécurité doit être traitée dès la conception : validation stricte des entrées, séparation des droits au niveau de la base, journalisation des erreurs et gestion appropriée des exceptions. L'adoption de PDO ou MySQLi facilite l'utilisation de requêtes préparées, la gestion des transactions et le traitement centralisé des erreurs. Les requêtes préparées séparent le code des paramètres et réduisent considérablement le risque d'injection SQL. Pour des travaux pratiques pédagogiques, centraliser l'accès aux données dans une couche dédiée améliore la maintenabilité et la sécurité des exercices présentés.
Tableau comparatif : mysql_* vs PDO
Le tableau ci-dessous synthétise limites et atouts des anciennes primitives mysql_* par rapport à PDO. Il aide à choisir une stratégie de migration vers des API modernes tout en conservant la compréhension des mécanismes historiques.
| Critère | mysql_* | PDO |
|---|---|---|
| Disponibilité | Obsolète depuis PHP 7, extension retirée | Supportée et maintenue, recommandée |
| Requêtes préparées | Non native | Oui (préparées et liées) |
| Gestion des erreurs | Codes/chaînes d'erreur | Exceptions et modes de gestion configurables |
| Portabilité | Spécifique à MySQL | Abstraction multi-SGBD (MySQL, PostgreSQL, SQLite, ...) |
| Recommandation pédagogique | Conserver pour compréhension historique | Utiliser pour tout nouveau projet |
Exemples de requêtes SQL avec PHP
Les exemples suivants montrent l'exécution de requêtes SQL simples et l'utilisation de requêtes préparées. Le premier extrait illustre la construction d'une table et l'insertion de données (LDD et LMD). Le second montre une insertion sécurisée avec PDO, illustrant la meilleure pratique à retenir pour des exercices et un tutoriel PHP MySQL.
-- Exemple LDD (création de table) et LMD (insertion)
CREATE TABLE revues (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
auteur VARCHAR(150),
date_parution DATE,
contenu TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO revues (titre, auteur, date_parution, contenu) VALUES
('Revue PHP Moderne', 'Dupont', '2023-09-01', 'Article d''introduction aux bonnes pratiques.'),
('Tutoriel MySQL', 'Martin', '2023-10-15', 'Exercices et corrigés sur les requêtes SQL.');
// Exemple d'insertion sécurisée avec PDO (requêtes préparées)
PDO::ERRMODE_EXCEPTION];
$pdo = new PDO($dsn, 'user', 'password', $options);
$stmt = $pdo->prepare('INSERT INTO revues (titre, auteur, date_parution, contenu) VALUES (:titre, :auteur, :date, :contenu)');
$stmt->execute([
':titre' => 'Revue PDO',
':auteur' => 'Durand',
':date' => '2024-01-01',
':contenu' => 'Insertion sécurisée avec PDO.'
]);
$id = $pdo->lastInsertId();
?>
Compatibilité des bases de données avec PHP
PHP prend en charge plusieurs pilotes natifs et via extensions, ce qui facilite l'adaptation des exercices présentés dans un tutoriel PHP MySQL à d'autres SGBD. La compatibilité permet de réutiliser les mêmes concepts de connexion, préparation et exécution de requêtes SQL PHP dans des contextes différents.
- MySQL / MariaDB (via PDO_MySQL, MySQLi)
- PostgreSQL (via PDO_PGSQL, pg_*)
- SQLite (via PDO_SQLITE)
Travaux pratiques
Exercices proposés : création de la table revues, scripts d'installation, affichage des listes et opérations CRUD. Les séquences incluent la vérification d'existence de table avant création, des scripts d'installation commentés et des exercices corrigés utilisables en contexte pédagogique ou pour un tutoriel PHP MySQL orienté pratique.
-- Vérification puis création (script d'installation simplifié)
CREATE TABLE IF NOT EXISTS revues (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
auteur VARCHAR(150),
date_parution DATE,
contenu TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;