diff options
Diffstat (limited to 'classes/db.php')
-rw-r--r-- | classes/db.php | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/classes/db.php b/classes/db.php index 1a4d0b2ee..05fb82d82 100644 --- a/classes/db.php +++ b/classes/db.php @@ -1,12 +1,29 @@ <?php class Db implements IDb { + + /* @var Db $instance */ private static $instance; + + /* @var IDb $adapter */ private $adapter; + private $link; + + /* @var PDO $pdo */ private $pdo; private function __construct() { + } + + private function __clone() { + // + } + + private function legacy_connect() { + + user_error("Legacy connect requested to " . DB_TYPE, E_USER_NOTICE); + $er = error_reporting(E_ALL); switch (DB_TYPE) { @@ -25,19 +42,31 @@ class Db implements IDb { exit(100); } + $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : ""); + + if (!$this->link) { + print("Error connecting through adapter: " . $this->adapter->last_error()); + exit(101); + } + + error_reporting($er); + } + + private function pdo_connect() { + $db_port = defined('DB_PORT') && DB_PORT ? ';port='.DB_PORT : ''; $this->pdo = new PDO(DB_TYPE . ':dbname='.DB_NAME.';host='.DB_HOST.$db_port, DB_USER, DB_PASS); - $this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); - if (!$this->pdo) { print("Error connecting via PDO."); exit(101); } + $this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); + if (DB_TYPE == "pgsql") { $this->pdo->query("set client_encoding = 'UTF-8'"); @@ -52,32 +81,27 @@ class Db implements IDb { $this->pdo->query("SET NAMES " . MYSQL_CHARSET); } } - - $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : ""); - - if (!$this->link) { - print("Error connecting through adapter: " . $this->adapter->last_error()); - exit(101); - } - - error_reporting($er); - } - - private function __clone() { - // } public static function get() { if (self::$instance == null) self::$instance = new self(); + if (!self::$instance->link) { + self::$instance->legacy_connect(); + } + return self::$instance; } - public static function pdo() { + public static function pdo() { if (self::$instance == null) self::$instance = new self(); + if (!self::$instance->pdo) { + self::$instance->pdo_connect(); + } + return self::$instance->pdo; } |