]>
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 | ||
52 | private function pdo_connect() { | |
53 | ||
2f0623c9 | 54 | $db_port = defined('DB_PORT') && DB_PORT ? ';port=' . DB_PORT : ''; |
f8db5bb4 | 55 | $db_host = defined('DB_HOST') && DB_HOST ? ';host=' . DB_HOST : ''; |
99bda9cc | 56 | |
83a052f1 AD |
57 | try { |
58 | $this->pdo = new PDO(DB_TYPE . ':dbname=' . DB_NAME . $db_host . $db_port, | |
59 | DB_USER, | |
60 | DB_PASS); | |
61 | } catch (Exception $e) { | |
62 | print "<pre>Exception while creating PDO object:" . $e->getMessage() . "</pre>"; | |
99bda9cc AD |
63 | exit(101); |
64 | } | |
65 | ||
2f0623c9 | 66 | $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); |
df5d2a06 | 67 | |
dd90eefa AD |
68 | if (DB_TYPE == "pgsql") { |
69 | ||
70 | $this->pdo->query("set client_encoding = 'UTF-8'"); | |
71 | $this->pdo->query("set datestyle = 'ISO, european'"); | |
72 | $this->pdo->query("set TIME ZONE 0"); | |
73 | $this->pdo->query("set cpu_tuple_cost = 0.5"); | |
74 | ||
75 | } else if (DB_TYPE == "mysql") { | |
76 | $this->pdo->query("SET time_zone = '+0:0'"); | |
77 | ||
78 | if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { | |
79 | $this->pdo->query("SET NAMES " . MYSQL_CHARSET); | |
80 | } | |
81 | } | |
95947917 AD |
82 | } |
83 | ||
84 | public static function get() { | |
85 | if (self::$instance == null) | |
86 | self::$instance = new self(); | |
87 | ||
2f0623c9 | 88 | if (!self::$instance->adapter) { |
df5d2a06 AD |
89 | self::$instance->legacy_connect(); |
90 | } | |
91 | ||
2f0623c9 | 92 | return self::$instance->adapter; |
95947917 AD |
93 | } |
94 | ||
df5d2a06 | 95 | public static function pdo() { |
2f0623c9 AD |
96 | if (self::$instance == null) |
97 | self::$instance = new self(); | |
8adb3ec4 | 98 | |
2f0623c9 | 99 | if (!self::$instance->pdo) { |
df5d2a06 AD |
100 | self::$instance->pdo_connect(); |
101 | } | |
102 | ||
2f0623c9 | 103 | return self::$instance->pdo; |
977cea14 | 104 | } |
ea79a0e0 | 105 | } |