retour
01/03
section 01
Connexion PDO et configuration
Connectez-vous pour sauvegarder votre progression et acceder aux quiz
Se connecterPDO (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 ?
| Critere | mysql_* (ancien) | mysqli | PDO |
|---|---|---|---|
| Securite | Aucune (deprecie) | Requetes preparees | Requetes preparees |
| SGBD | MySQL uniquement | MySQL uniquement | MySQL, PostgreSQL, SQLite... |
| API | Procedurale | Procedurale + OOP | OOP uniquement |
| Status | Supprime en PHP 7 | Actif | Recommande |
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
| Option | Valeur | Effet |
|---|---|---|
ERRMODE_EXCEPTION | Exceptions sur erreur | Pas besoin de verifier chaque requete |
FETCH_ASSOC | Tableaux associatifs | $row['nom'] au lieu de $row[0] |
EMULATE_PREPARES = false | Requetes preparees natives | Meilleure 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_fortphp<?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).// voir aussi