Utilisation des bases de données avec PHP ?
Mis à jour le 3 novembre 2026
Voici un exemple d'utilisation de vos bases de données MySQL (ou MariaDB) dans un script PHP, avec PDO, l'interface recommandée depuis PHP 7. Les anciennes fonctions mysql_* n'existent plus depuis PHP 7.0.
La base de données utilisée est celle décrite dans l'article Comment créer une base de données. Nous y avons créé une table livres avec 3 champs : id, auteur, titre.
1. Mettre les identifiants à part
Créez un fichier config.php en dehors de public_html (par exemple dans le dossier de votre compte), pour que personne ne puisse le lire depuis le web :
<?php
return [
'dsn' => 'mysql:host=localhost;dbname=moncompte_projet01;charset=utf8mb4',
'user' => 'moncompte_utilisateur',
'password' => 'votre-mot-de-passe',
];
2. Le script
Le script suivant affiche le titre et l'auteur de chaque livre :
<?php
$config = require __DIR__ . '/../config.php';
try {
$pdo = new PDO($config['dsn'], $config['user'], $config['password'], [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
error_log($e->getMessage());
exit('Erreur de connexion à la base de données.');
}
foreach ($pdo->query('SELECT titre, auteur FROM livres ORDER BY titre') as $livre) {
echo 'Titre : ' . htmlspecialchars($livre['titre']) . ', ';
echo 'Auteur : ' . htmlspecialchars($livre['auteur']) . "<br>\n";
}
3. Avec une valeur venant du visiteur : une requête préparée
Ne mettez jamais une valeur reçue (formulaire, adresse) directement dans le SQL : utilisez une requête préparée, qui protège contre les injections SQL.
<?php
$requete = $pdo->prepare('SELECT titre, auteur FROM livres WHERE auteur = :auteur');
$requete->execute(['auteur' => $_GET['auteur'] ?? '']);
foreach ($requete as $livre) {
echo htmlspecialchars($livre['titre']) . "<br>\n";
}
Bonnes pratiques
htmlspecialchars()à l'affichage, pour éviter d'injecter du HTML dans la page.- Le message d'erreur détaillé va dans le journal (
error_log), jamais à l'écran. charset=utf8mb4dans le DSN, pour les accents et les émojis.- Un utilisateur MySQL par site, avec seulement les droits nécessaires.