summaryrefslogtreecommitdiff
path: root/old/model version 0.1/DB.php
diff options
context:
space:
mode:
Diffstat (limited to 'old/model version 0.1/DB.php')
-rw-r--r--old/model version 0.1/DB.php48
1 files changed, 48 insertions, 0 deletions
diff --git a/old/model version 0.1/DB.php b/old/model version 0.1/DB.php
new file mode 100644
index 0000000..47407ba
--- /dev/null
+++ b/old/model version 0.1/DB.php
@@ -0,0 +1,48 @@
1<?php
2// src/model/DB.php
3
4// cette classe applique le pattern "singleton", il empêche la classe PDO d'être instanciée plusieurs fois
5// l'instance est récupérable partout mais sans les inconvénients d'une variable globale
6
7// comment?
8// - le constructeur est privé, c'est à cette condition que l'instanciation devient contrôlable
9// - notre instance unique est stockée dans un attribut privé et statique
10// - une méthode statique appele le contructeur si l'instance unique n'existe pas encore, puis retourne l'instance
11
12class DB extends PDO
13{
14 // paramètres du constructeur de PDO
15 public static $dsn = ''; // Data Source Name = préfixe + hôte + port + nom de la base + encodage
16 //~ public static $user = '';
17 //~ public static $password = '';
18 //~ public static $options = '';
19
20 private static $Instance;
21
22 private function __construct() // exécuté une seul fois à cause du "if" dans getInstance()
23 {
24 try
25 {
26 parent::__construct(self::$dsn); // => PDO::$dsn
27 //$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8'); // pour mysql/mariadb
28 $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $this pour la méthode du parent PDO
29 $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // pour PDO:fetch() et PDO::fetchAll()
30 // avec PDO::FETCH_ASSOC on obtient un tableau associatif, marche très bien puisqu'on utilise déjà des ID avec incrémentation automatique
31 // avec PDO::FETCH_BOTH (par défaut) on récupère les données en double (identifiants partant de 0 + tableau associatif)
32 }
33 catch(PDOException $e)
34 {
35 die("Impossible de se connecter à la base de données.\n" . $e->getMessage());
36 }
37 }
38
39 // créer son objet depuis Model avec: $db = parent::getInstance();
40 public static function getInstance(): self
41 {
42 if(self::$Instance === null)
43 {
44 self::$Instance = new self;
45 }
46 return self::$Instance;
47 }
48}