Aller au contenu
Atlas Hoster
Bases de données MySQL

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=utf8mb4 dans le DSN, pour les accents et les émojis.
  • Un utilisateur MySQL par site, avec seulement les droits nécessaires.

Bases de données MySQLTous les guides

Utilisation des bases de données avec PHP ? · Atlas Hoster