-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.php
140 lines (120 loc) · 3.86 KB
/
db.php
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
*
* @package Library
* @subpackage Core
* @author Adrien <[email protected]>
* @license Solire http://www.solire.fr/
*/
namespace Slrfw;
/**
* Gestionnaire de connexion à la base de données
*
* @package Library
* @subpackage Core
* @author Adrien <[email protected]>
* @license Solire http://www.solire.fr/
*/
class DB
{
/**
* Contient les objets PDO de connection
*
* @var array
*/
static private $_present;
/**
* Parametrage de base
*
* @var array
*/
static private $_config = array(
\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 => '' // chaine 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
* Parametrable 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
* defaut 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 \PDO
* @throws LibExeception Si il n'y a pas de bdd répondant au nom $dbName
*/
final static public function get($dbName)
{
if (isset(self::$_present[$dbName])) {
return self::$_present[$dbName];
}
throw new Exception\Lib('Aucune connexion sous le nom ' . $dbName);
}
}