Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
bd.class.php
Aller à la documentation de ce fichier.
1<?php
2
13class bd
14{
15 public const ROLE_SITE_USER = 'site_user';
16 public const ROLE_SITE_ADMINISTRATEUR = 'site_administrateur';
17 public const ROLE_DB_ADMINISTRATEUR = 'db_administrateur';
18
22 private static ?bd $instance = null;
23
27 private array $connections = [];
28
32 private array $dbConfig;
33
38 private function __construct()
39 {
40 $config = Constantes::getInstance()->getConfig()['db'];
41 $this->dbConfig = [
42 'host' => $config['host'],
43 'dbname' => $config['dbname'],
44 'port' => (int) ($config['port'] ?? 3306),
45 ];
46 }
47
52 public static function getInstance(): bd
53 {
54 if (self::$instance === null) {
55 self::$instance = new bd();
56 }
57 return self::$instance;
58 }
59
63 private function getDsn(): string
64 {
65 return sprintf(
66 'mysql:host=%s;port=%d;dbname=%s;charset=utf8mb4',
67 $this->dbConfig['host'],
68 $this->dbConfig['port'],
69 $this->dbConfig['dbname']
70 );
71 }
72
79 private function createConnection(string $role): PDO
80 {
81 $config = Constantes::getInstance()->getConfig()['db'];
82 if (!isset($config[$role]['username']) || !isset($config[$role]['password'])) {
83 throw new PDOException("Configuration DB manquante pour le rôle : {$role}");
84 }
85 $username = $config[$role]['username'];
86 $password = $config[$role]['password'];
87 $pdo = new PDO($this->getDsn(), $username, $password, [
88 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
89 ]);
90 $this->connections[$role] = $pdo;
91 return $pdo;
92 }
93
101 public function getConnexion(string $role = self::ROLE_SITE_USER): PDO
102 {
103 if (!isset($this->connections[$role])) {
104 $this->createConnection($role);
105 }
106 return $this->connections[$role];
107 }
108
112 private function __clone() {}
113
118 public function __wakeup()
119 {
120 throw new Exception("Un singleton ne doit pas être deserialisé.");
121 }
122}
static getInstance()
Retourne l'instance unique de la classe Constantes (pattern Singleton).
array $dbConfig
Definition bd.class.php:32
getConnexion(string $role=self::ROLE_SITE_USER)
Retourne la connexion PDO pour le rôle demandé.
Definition bd.class.php:101
array $connections
Definition bd.class.php:27
static bd $instance
Definition bd.class.php:22
__construct()
Constructeur privé pour empêcher l'instanciation directe.
Definition bd.class.php:38
const ROLE_SITE_USER
Definition bd.class.php:15
__clone()
Empêche le clonage du singleton.
Definition bd.class.php:112
const ROLE_DB_ADMINISTRATEUR
Definition bd.class.php:17
const ROLE_SITE_ADMINISTRATEUR
Definition bd.class.php:16
getDsn()
Construit le DSN MySQL à partir de la config partagée.
Definition bd.class.php:63
static getInstance()
Retourne l'instance unique de la classe bd (pattern Singleton).
Definition bd.class.php:52
__wakeup()
Empêche la désérialisation du singleton.
Definition bd.class.php:118
createConnection(string $role)
Crée et retourne une connexion PDO pour le rôle donné (lazy).
Definition bd.class.php:79
$pdo
Classe de gestion de la connexion MySQL.
Definition include.php:328