PDO
En PHP, la méthode moderne et recommandée pour communiquer avec MySQL/MariaDB est PDO. Évite les anciennes fonctions mysql_* : elles ont été supprimées depuis PHP 7.
Le principe est : PHP → PDO → MySQL/MariaDB
1. Se connecter à MySQL
[edit | edit source]<?php
$host = 'localhost';
$db = 'ma_base';
$user = 'mon_utilisateur';
$pass = 'mon_mot_de_passe';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
// Affiche les erreurs SQL sous forme d'exceptions
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connexion réussie !";
} catch (PDOException $e) {
die("Erreur de connexion : " . $e->getMessage());
}
En pratique, mets cette connexion dans un fichier séparé, par exemple database.php :
<?php
$dsn = 'mysql:host=localhost;dbname=ma_base;charset=utf8mb4';
$user = 'mon_utilisateur';
$pass = 'mon_mot_de_passe';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
die('Erreur de connexion à la base de données.');
}
Puis dans tes autres fichiers :
require_once 'database.php';
2. Lire des données
[edit | edit source]Imaginons cette table :
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255)
);
Pour récupérer tous les utilisateurs :
$stmt = $pdo->query('SELECT * FROM users');
$users = $stmt->fetchAll();
foreach ($users as $user) {
echo $user['name'] . '<br>';
}
Comme PDO::FETCH_ASSOC est configuré dans notre connexion, chaque utilisateur est un tableau associatif :
$user['id']; $user['name']; $user['email'];
3. Chercher un utilisateur
[edit | edit source]Supposons que tu veuilles récupérer l'utilisateur dont l'ID est 5.
Ne fais pas ça :
$id = $_GET['id'];
$stmt = $pdo->query("SELECT * FROM users WHERE id = $id");
C'est une mauvaise pratique et peut mener à une injection SQL.
Utilise une requête préparée :
$id = $_GET['id'];
$stmt = $pdo->prepare(
'SELECT * FROM users WHERE id = :id'
);
$stmt->execute([
'id' => $id
]);
$user = $stmt->fetch();
Puis :
if ($user) {
echo $user['name'];
} else {
echo 'Utilisateur introuvable';
}
4. Insérer des données
[edit | edit source]$name = 'Antoine';
$email = 'antoine@example.com';
$stmt = $pdo->prepare(
'INSERT INTO users (name, email)
VALUES (:name, :email)'
);
$stmt->execute([
'name' => $name,
'email' => $email
]);
Tu peux récupérer l'ID créé :
$id = $pdo->lastInsertId(); echo "Nouvel utilisateur : $id";
5. Modifier des données
[edit | edit source]$id = 5;
$name = 'Nouveau nom';
$stmt = $pdo->prepare(
'UPDATE users
SET name = :name
WHERE id = :id'
);
$stmt->execute([
'name' => $name,
'id' => $id
]);
6. Supprimer des données
[edit | edit source]$id = 5;
$stmt = $pdo->prepare(
'DELETE FROM users
WHERE id = :id'
);
$stmt->execute([
'id' => $id
]);
7. Exemple complet
[edit | edit source]Une page PHP qui affiche les utilisateurs et permet d'en ajouter pourrait ressembler à :
<?php
require_once 'database.php';
// Ajout
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'];
$email = $_POST['email'];
$stmt = $pdo->prepare(
'INSERT INTO users (name, email)
VALUES (:name, :email)'
);
$stmt->execute([
'name' => $name,
'email' => $email
]);
}
// Récupération
$stmt = $pdo->query('SELECT * FROM users ORDER BY id DESC');
$users = $stmt->fetchAll();
?>
<form method="POST">
<input name="name" placeholder="Nom">
<input name="email" type="email" placeholder="Email">
<button type="submit">Ajouter</button>
</form>
<hr>
<?php foreach ($users as $user): ?>
<p>
<?= htmlspecialchars($user['name']) ?>
—
<?= htmlspecialchars($user['email']) ?>
</p>
<?php endforeach; ?>
Le htmlspecialchars() est important ici : les données venant de la base ne doivent pas être injectées directement dans du HTML.
Le modèle mental à retenir
[edit | edit source]Pour quasiment toutes tes applications PHP/MySQL :
// 1. Connexion
require_once 'database.php';
// 2. Préparer
$stmt = $pdo->prepare('SELECT ... WHERE ...');
// 3. Envoyer les paramètres
$stmt->execute([...]);
// 4. Récupérer
$data = $stmt->fetch();
// ou
$data = $stmt->fetchAll();
Et pour les modifications :
INSERT → ajouter SELECT → lire UPDATE → modifier DELETE → supprimer
C'est le fameux CRUD : Create, Read, Update, Delete.