-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDB.php
More file actions
139 lines (124 loc) · 4.19 KB
/
Copy pathDB.php
File metadata and controls
139 lines (124 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/**
* Gestionnaire de connexion à la base de données.
*
* @author dev <dev@solire.fr>
* @license CC by-nc http://creativecommons.org/licenses/by-nc/3.0/fr/
*/
namespace Solire\Lib;
/**
* Gestionnaire de connexion à la base de données.
*
* @author dev <dev@solire.fr>
* @license CC by-nc http://creativecommons.org/licenses/by-nc/3.0/fr/
*/
class DB
{
/**
* Contient les objets PDO de connection.
*
* @var MyPDO[]
*/
private static $present;
/**
* Paramétrage de base.
*
* @var array
*/
private static $config = [
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
];
/**
* Inutilisé.
*
* @ignore
*/
private function __construct()
{
}
/**
* Crée une connection à la base de données.
*
* @param array $ini Doit être sous la forme :<ul>
* <li>dsn => '' // chaîne de connexion propre à pdo, par exemple :
* "mysql:dbname=%s;host=%s" ou "mysql:dbname=%s;host=%s;port=%s"</li>
* <li>host => '' // host de la connexion à la bdd</li>
* <li>dbname => '' // Nom de la base de données</li>
* <li>user => '' // utilisateur mysql</li>
* <li>password => '' // mot de passe</li>
* <li>port => '' // [facultatif], port de la connexion</li>
* <li>utf8 => true // [facultatif], activer encodage buffer sortie</li>
* <li>error => true // [facultatif], activer les erreurs pdo</li>
* <li>profil => false // [facultatif], activer le profiling</li>
* <li>nocache => false // [facultatif], désactiver le cache</li>
* </ul>
* @param string $otherDbName Nom de la base de données dans le cas où l'on
* veut se connecter à une difference de celle présente dans $ini
*
* @return MyPDO
*/
public static function factory($ini, $otherDbName = null)
{
if ($otherDbName) {
$ini['dbname'] = $otherDbName;
}
if (isset(self::$present[$ini['name']])) {
return self::$present[$ini['name']];
}
$dsn = sprintf(
$ini['dsn'],
$ini['dbname'],
$ini['host'],
$ini['port']
);
self::$present[$ini['name']] = new MyPDO(
$dsn,
$ini['user'],
$ini['password'],
self::$config
);
/*
* Option d'affichage des erreurs
* Paramétrable dans le config.ini de la bdd
*/
if (isset($ini['error']) && $ini['error'] == true) {
self::$present[$ini['name']]->setAttribute(
\PDO::ATTR_ERRMODE,
\PDO::ERRMODE_EXCEPTION
);
}
/* Profiling */
if (isset($ini['profil']) && $ini['profil'] == true) {
self::$present[$ini['name']]->exec('SET profiling = 1;');
}
/*
* Spécifique à mysql
* Modifie l'encodage du buffer de sortie de la base qui est par
* défaut en ISO pour être en accord avec l'encodage de la base.
*/
if (isset($ini['utf8']) && $ini['utf8'] == true) {
self::$present[$ini['name']]->exec('SET NAMES UTF8');
}
/* Cache */
if (isset($ini['nocache']) && $ini['nocache'] == true) {
self::$present[$ini['name']]->exec('SET SESSION query_cache_type = OFF;');
}
return self::$present[$ini['name']];
}
/**
* Renvois la connexion à la base déjà paramétré.
*
* @param string $dbName Nom de la base de données
*
* @return MyPDO
*
* @throws Exception\Lib
*/
final public static function get($dbName)
{
if (isset(self::$present[$dbName])) {
return self::$present[$dbName];
}
throw new Exception\Lib('Aucune connexion sous le nom ' . $dbName);
}
}