Skip to content

Connexion à une base de données avec PDO

Objectifs pédagogiques

  • Comprendre l’intérêt de PDO.
  • Se connecter à une base de données de manière sécurisée.
  • Gérer les erreurs de connexion.

Pourquoi PDO ?

PDO (PHP Data Objects) est une extension orientée objet qui fournit une interface unifiée pour accéder à différentes bases de données (MySQL, PostgreSQL, SQLite…).

Avantages principaux :

  • Compatible avec plusieurs moteurs de base de données.
  • Supporte les requêtes préparées (protection contre les injections SQL).
  • Intègre une gestion fine des erreurs via exceptions.

Connexion à MySQL avec PDO

Exemple minimal

php
<?php

$host = 'localhost';
$dbname = 'todo_db';
$user = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $password);
    echo "Connexion réussie";
} catch (PDOException $e) {
    echo "Erreur de connexion : " . $e->getMessage();
}

Explication

  • PDO(...) : instancie un nouvel objet PDO avec les informations de connexion.
  • Le DSN (Data Source Name) commence par mysql: suivi du nom d'hôte, de la base, et du charset.
  • L’exception PDOException est levée si la connexion échoue.

Connexion à SQLite avec PDO

Exemple minimal

php
<?php

$path = __DIR__ . '/database.sqlite';

try {
    $pdo = new PDO("sqlite:$path");
    echo "Connexion réussie à SQLite";
} catch (PDOException $e) {
    echo "Erreur de connexion : " . $e->getMessage();
}

Explication

  • sqlite:$path : le DSN (Data Source Name) commence par sqlite: suivi du chemin du fichier SQLite.
  • Le fichier sera créé automatiquement s’il n’existe pas encore (à condition que le dossier soit accessible en écriture).
  • L’objet $pdo peut ensuite être utilisé comme pour MySQL (requêtes, transactions, etc.).
  • L’exception PDOException est levée si une erreur se produit.

💡 Idéal en développement : pas besoin de serveur, tout tient dans un fichier.

Activer le mode exception

Par défaut, PDO ne lève pas d’erreur. Pour améliorer le debug et la robustesse :

php
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

À ajouter juste après la création de l’objet PDO.

Sécuriser les identifiants

Il est recommandé de stocker les identifiants de connexion dans un fichier à part (ex. .env ou config.php), puis d’y accéder :

php
// config.php
return [
    'host' => 'localhost',
    'dbname' => 'todo_db',
    'user' => 'root',
    'password' => '',
];
php
// db.php
$config = require 'config.php';

try {
    $pdo = new PDO(
        "mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8",
        $config['user'],
        $config['password']
    );
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Erreur de connexion : " . $e->getMessage());
}

Bonnes pratiques

  • Toujours attraper les exceptions.
  • Ne jamais stocker d'identifiants dans le code source principal.
  • Utiliser utf8 (ou utf8mb4) pour éviter les problèmes d'encodage.
  • Centraliser l’accès à la base dans un seul fichier (éviter les doublons de connexion).