retour
01/03
section 01

Connexion PDO et configuration

Connectez-vous pour sauvegarder votre progression et acceder aux quiz
Se connecter

PDO (PHP Data Objects) est l'interface standard PHP pour acceder aux bases de donnees. Elle est independante du SGBD : le meme code fonctionne avec MySQL, PostgreSQL, SQLite, etc.

Pourquoi PDO ?

Criteremysql_* (ancien)mysqliPDO
SecuriteAucune (deprecie)Requetes prepareesRequetes preparees
SGBDMySQL uniquementMySQL uniquementMySQL, PostgreSQL, SQLite...
APIProceduraleProcedurale + OOPOOP uniquement
StatusSupprime en PHP 7ActifRecommande

Connexion de base

php<?php
// Parametres de connexion
$host = 'localhost';
$dbname = 'ma_formation';
$user = 'root';
$password = '';
$port = 3306;

// DSN (Data Source Name)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8mb4";

try {
    $pdo = new PDO($dsn, $user, $password, [
        // Options recommandees
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ]);

    echo "Connexion reussie !";
} catch (PDOException $e) {
    // Ne JAMAIS afficher $e->getMessage() en production !
    error_log("Erreur BDD : " . $e->getMessage());
    die("Erreur de connexion a la base de donnees.");
}

Options PDO expliquees

OptionValeurEffet
ERRMODE_EXCEPTIONExceptions sur erreurPas besoin de verifier chaque requete
FETCH_ASSOCTableaux associatifs$row['nom'] au lieu de $row[0]
EMULATE_PREPARES = falseRequetes preparees nativesMeilleure securite

Classe de connexion reutilisable

php<?php
// src/Database.php
namespace App;

class Database
{
    private static ?\PDO $instance = null;

    public static function getConnection(): \PDO
    {
        if (self::$instance === null) {
            $dsn = sprintf(
                'mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4',
                $_ENV['DB_HOST'] ?? 'localhost',
                $_ENV['DB_PORT'] ?? '3306',
                $_ENV['DB_NAME'] ?? 'ma_formation'
            );

            self::$instance = new \PDO(
                $dsn,
                $_ENV['DB_USER'] ?? 'root',
                $_ENV['DB_PASSWORD'] ?? '',
                [
                    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                    \PDO::ATTR_EMULATE_PREPARES => false,
                ]
            );
        }

        return self::$instance;
    }
}

// Utilisation
$pdo = Database::getConnection();

Variables d'environnement (.env)

bash# .env (NE JAMAIS committer ce fichier !)
DB_HOST=localhost
DB_PORT=3306
DB_NAME=ma_formation
DB_USER=mon_utilisateur
DB_PASSWORD=un_mot_de_passe_fort
php<?php
// Charger les variables d'environnement
// Avec la lib vlucas/phpdotenv :
// composer require vlucas/phpdotenv

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

// Acces via $_ENV['DB_HOST'] ou getenv('DB_HOST')
Securite absolue : Ne mettez JAMAIS les identifiants de base de donnees en dur dans le code. Utilisez un fichier .env et ajoutez-le au .gitignore. En production, les variables d'environnement sont definies au niveau du serveur (nginx, Docker, systemd).