]>
Commit | Line | Data |
---|---|---|
95947917 | 1 | <?php |
2f0623c9 AD |
2 | class Db |
3 | { | |
df5d2a06 AD |
4 | |
5 | /* @var Db $instance */ | |
95947917 | 6 | private static $instance; |
df5d2a06 AD |
7 | |
8 | /* @var IDb $adapter */ | |
95947917 | 9 | private $adapter; |
df5d2a06 | 10 | |
404e2e36 | 11 | private $link; |
df5d2a06 AD |
12 | |
13 | /* @var PDO $pdo */ | |
99bda9cc | 14 | private $pdo; |
95947917 | 15 | |
df5d2a06 AD |
16 | private function __clone() { |
17 | // | |
18 | } | |
19 | ||
20 | private function legacy_connect() { | |
21 | ||
22 | user_error("Legacy connect requested to " . DB_TYPE, E_USER_NOTICE); | |
23 | ||
e441b583 AD |
24 | $er = error_reporting(E_ALL); |
25 | ||
99bda9cc | 26 | switch (DB_TYPE) { |
e441b583 | 27 | case "mysql": |
e54eb40a | 28 | $this->adapter = new Db_Mysqli(); |
e441b583 AD |
29 | break; |
30 | case "pgsql": | |
31 | $this->adapter = new Db_Pgsql(); | |
32 | break; | |
33 | default: | |
34 | die("Unknown DB_TYPE: " . DB_TYPE); | |
95947917 AD |
35 | } |
36 | ||
3c111597 AD |
37 | if (!$this->adapter) { |
38 | print("Error initializing database adapter for " . DB_TYPE); | |
39 | exit(100); | |
40 | } | |
e441b583 | 41 | |
df5d2a06 AD |
42 | $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : ""); |
43 | ||
44 | if (!$this->link) { | |
45 | print("Error connecting through adapter: " . $this->adapter->last_error()); | |
46 | exit(101); | |
47 | } | |
48 | ||
49 | error_reporting($er); | |
50 | } | |
51 | ||
bb843302 AD |
52 | // this really shouldn't be used unless a separate PDO connection is needed |
53 | // normal usage is Db::pdo()->prepare(...) etc | |
54 | public function pdo_connect() { | |
df5d2a06 | 55 | |
2f0623c9 | 56 | $db_port = defined('DB_PORT') && DB_PORT ? ';port=' . DB_PORT : ''; |
f8db5bb4 | 57 | $db_host = defined('DB_HOST') && DB_HOST ? ';host=' . DB_HOST : ''; |
99bda9cc | 58 | |
83a052f1 | 59 | try { |
bb843302 | 60 | $pdo = new PDO(DB_TYPE . ':dbname=' . DB_NAME . $db_host . $db_port, |
83a052f1 AD |
61 | DB_USER, |
62 | DB_PASS); | |
63 | } catch (Exception $e) { | |
64 | print "<pre>Exception while creating PDO object:" . $e->getMessage() . "</pre>"; | |
99bda9cc AD |
65 | exit(101); |
66 | } | |
67 | ||
bb843302 | 68 | $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
df5d2a06 | 69 | |
dd90eefa AD |
70 | if (DB_TYPE == "pgsql") { |
71 | ||
bb843302 AD |
72 | $pdo->query("set client_encoding = 'UTF-8'"); |
73 | $pdo->query("set datestyle = 'ISO, european'"); | |
74 | $pdo->query("set TIME ZONE 0"); | |
75 | $pdo->query("set cpu_tuple_cost = 0.5"); | |
dd90eefa AD |
76 | |
77 | } else if (DB_TYPE == "mysql") { | |
bb843302 | 78 | $pdo->query("SET time_zone = '+0:0'"); |
dd90eefa AD |
79 | |
80 | if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { | |
bb843302 | 81 | $pdo->query("SET NAMES " . MYSQL_CHARSET); |
dd90eefa AD |
82 | } |
83 | } | |
bb843302 AD |
84 | |
85 | return $pdo; | |
86 | } | |
87 | ||
88 | public static function instance() { | |
89 | if (self::$instance == null) | |
90 | self::$instance = new self(); | |
91 | ||
92 | return self::$instance; | |
95947917 AD |
93 | } |
94 | ||
95 | public static function get() { | |
96 | if (self::$instance == null) | |
97 | self::$instance = new self(); | |
98 | ||
2f0623c9 | 99 | if (!self::$instance->adapter) { |
df5d2a06 AD |
100 | self::$instance->legacy_connect(); |
101 | } | |
102 | ||
2f0623c9 | 103 | return self::$instance->adapter; |
95947917 AD |
104 | } |
105 | ||
df5d2a06 | 106 | public static function pdo() { |
2f0623c9 AD |
107 | if (self::$instance == null) |
108 | self::$instance = new self(); | |
8adb3ec4 | 109 | |
2f0623c9 | 110 | if (!self::$instance->pdo) { |
bb843302 | 111 | self::$instance->pdo = self::$instance->pdo_connect(); |
df5d2a06 AD |
112 | } |
113 | ||
2f0623c9 | 114 | return self::$instance->pdo; |
977cea14 | 115 | } |
01d22e25 | 116 | } |