Connexion PHP à MySQL : Guide Complet
Apprenez à connecter vos scripts PHP à une base de données MySQL avec les méthodes mysqli et PDO. Requêtes sécurisées, gestion d'erreurs et bonnes pratiques expliquées simplement.
1️⃣ Introduction
Dans le développement web moderne, la connexion entre PHP et MySQL est essentielle pour créer des applications dynamiques. Cette combinaison permet de stocker, récupérer et manipuler des données de manière efficace.
Pourquoi PHP et MySQL fonctionnent si bien ensemble ?
- Compatibilité native : PHP inclut des extensions dédiées pour MySQL
- Performance optimisée : Communication directe et rapide
- Communauté active : Documentation riche et nombreux exemples
- Sécurité : Mécanismes intégrés contre les injections SQL
- Gratuité : Stack LAMP/WAMP entièrement open source
À quoi sert une base de données dans une application web ?
Une base de données permet de :
- Stocker durablement les informations utilisateurs
- Organiser efficacement de grandes quantités de données
- Récupérer rapidement des informations spécifiques
- Sécuriser les données sensibles
- Maintenir l'intégrité des relations entre données
2️⃣ Les prérequis
Avant de commencer, assurez-vous d'avoir les éléments suivants :
Environnement de développement
- WAMP, XAMPP ou MAMP installé et fonctionnel
- PHP 7.4+ configuré et opérationnel
- Serveur web local accessible (
http://localhost)
Base de données MySQL
Créez une base de données nommée tutoriel_php avec une table utilisateurs :
CREATE TABLE utilisateurs (
id INT PRIMARY KEY AUTO_INCREMENT,
prenom VARCHAR(50) NOT NULL,
nom VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
date_inscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insertion de données de test
INSERT INTO utilisateurs (prenom, nom, email)
VALUES
('Alice', 'Dupont', 'alice.dupont@email.com'),
('Bob', 'Martin', 'bob.martin@email.com'),
('Clara', 'Leroy', 'clara.leroy@email.com');
💡 Astuce rapide
Vous pouvez exécuter ces commandes directement dans phpMyAdmin ou via la ligne de commande MySQL.
3️⃣ Les différentes méthodes de connexion
Il existe deux méthodes principales pour connecter PHP à MySQL : mysqli et PDO. Chacune a ses avantages.
a. Connexion avec `mysqli`
MySQL Improved (mysqli) est l'extension améliorée pour MySQL, spécifiquement conçue pour ce système de base de données.
$conn = new mysqli("localhost", "root", "", "tutoriel_php");
// Vérification de la connexion
if ($conn->connect_error) {
die("Connexion échouée : " . $conn->connect_error);
}
echo "Connexion réussie avec mysqli !";
Explication des paramètres :
- "localhost" : Serveur de base de données
- "root" : Nom d'utilisateur MySQL
- "" : Mot de passe (vide par défaut en local)
- "tutoriel_php" : Nom de la base de données
b. Connexion avec `PDO`
PHP Data Objects (PDO) offre une abstraction permettant de travailler avec différents systèmes de bases de données.
try {
$pdo = new PDO("mysql:host=localhost;dbname=tutoriel_php", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connexion réussie avec PDO !";
} catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
Comparaison mysqli vs PDO
| Caractéristique | mysqli | PDO |
|---|---|---|
| Support multi-bases | ❌ MySQL uniquement | ✅ MySQL, PostgreSQL, SQLite, etc. |
| Syntaxe orientée objet | ✅ | ✅ |
| Syntaxe procédurale | ✅ | ❌ |
| Requêtes préparées | ✅ | ✅ |
| Gestion des exceptions | ❌ Limitée | ✅ Complète |
💡 Recommandation WebIntelligence
Pour les nouveaux projets, nous recommandons PDO pour sa portabilité entre différents systèmes de bases de données et sa meilleure gestion des erreurs.
4️⃣ Exécuter des requêtes simples
Maintenant que nous sommes connectés, voyons comment exécuter des requêtes SQL basiques.
a. Requête SELECT avec mysqli
$sql = "SELECT id, prenom, nom, email FROM utilisateurs";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Affichage des données
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Nom: " . $row["prenom"] . " " . $row["nom"] . "<br>";
}
} else {
echo "Aucun résultat trouvé";
}
b. Requête SELECT avec PDO
$sql = "SELECT id, prenom, nom, email FROM utilisateurs";
$stmt = $pdo->query($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row['id'] . " - Nom: " . $row['prenom'] . " " . $row['nom'] . "<br>";
}
c. Requête INSERT sécurisée avec requêtes préparées
Les requêtes préparées sont ESSENTIELLES pour éviter les injections SQL.
$stmt = $conn->prepare("INSERT INTO utilisateurs (prenom, nom, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $prenom, $nom, $email);
// Définition des paramètres et exécution
$prenom = "Émilie";
$nom = "Rousseau";
$email = "emilie.rousseau@email.com";
$stmt->execute();
echo "Nouvel utilisateur ajouté avec succès !";
$sql = "INSERT INTO utilisateurs (prenom, nom, email) VALUES (:prenom, :nom, :email)";
$stmt = $pdo->prepare($sql);
// Liaison des paramètres
$stmt->bindParam(':prenom', $prenom);
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':email', $email);
// Exécution
$prenom = "Thomas";
$nom = "Girard";
$email = "thomas.girard@email.com";
$stmt->execute();
echo "Nouvel utilisateur ajouté avec PDO !";
🔒 Sécurité : Pourquoi les requêtes préparées ?
Les requêtes préparées séparent les données de la structure de la requête, empêchant ainsi les injections SQL. C'est la méthode la plus sûre pour exécuter des requêtes avec des données utilisateur.
5️⃣ Bonnes pratiques essentielles
Adopter ces bonnes pratiques dès le début vous évitera bien des problèmes !
a. Gestion sécurisée des identifiants
define('DB_HOST', 'localhost');
define('DB_NAME', 'tutoriel_php');
define('DB_USER', 'root');
define('DB_PASS', '');
// Dans votre script principal
require_once 'config.php';
try {
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
// ...
} catch(PDOException $e) {
error_log("Erreur connexion: " . $e->getMessage());
die("Erreur de connexion à la base de données");
}
b. Fermeture des connexions
$conn->close();
// Avec PDO
$pdo = null;
c. Validation des entrées utilisateur
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) {
die("Adresse email invalide");
}
$prenom = trim(htmlspecialchars($_POST['prenom']));
if (empty($prenom)) {
die("Le prénom est obligatoire");
}
✅ Checklist des bonnes pratiques
- ☑️ Utiliser des requêtes préparées
- ☑️ Stocker les identifiants dans un fichier séparé
- ☑️ Valider et nettoyer toutes les entrées utilisateur
- ☑️ Fermer les connexions après utilisation
- ☑️ Utiliser le mode erreur PDO::ERRMODE_EXCEPTION
- ☑️ Loguer les erreurs sans les afficher aux utilisateurs
6️⃣ Conclusion
Félicitations ! Vous maîtrisez maintenant les bases de la connexion entre PHP et MySQL. Voici un récapitulatif de ce que vous avez appris :
✅ Compétences acquises :
- Connexion à MySQL avec mysqli et PDO
- Exécution de requêtes SELECT et INSERT
- Utilisation des requêtes préparées pour la sécurité
- Gestion des erreurs et exceptions
- Bonnes pratiques de sécurité essentielles
- Organisation du code avec fichiers de configuration
Prochaines étapes recommandées :
- CRUD complet : Create, Read, Update, Delete
- Jointures : Combiner des données de plusieurs tables
- Transactions : Grouper des opérations
- ORM : Utiliser des bibliothèques comme Doctrine
- Optimisation : Index et requêtes performantes
🚀 Défi du prochain article
Dans le prochain tutoriel, nous créerons ensemble un CRUD complet permettant de gérer des utilisateurs : ajout, modification, suppression et affichage avec une interface web !
👉 "Créer un CRUD complet avec PHP et MySQL"
Questions Fréquentes sur PHP/MySQL
Quelle méthode choisir entre mysqli et PDO ?
PDO est recommandé pour sa portabilité entre différentes bases de données et sa meilleure gestion des erreurs. mysqli reste une bonne option si vous travaillez exclusivement avec MySQL.
Les requêtes préparées sont-elles obligatoires ?
Oui, dès que vous utilisez des données provenant de l'utilisateur. C'est la seule façon de se protéger efficacement contre les injections SQL.
Comment gérer les erreurs en production ?
En production, affichez un message générique à l'utilisateur et loguez le détail de l'erreur dans un fichier de log. Ne jamais afficher les erreurs SQL directement.
Faut-il fermer manuellement les connexions PDO ?
PHP ferme automatiquement les connexions à la fin du script, mais c'est une bonne pratique de les fermer explicitement avec $pdo = null.