/** * Connect to the database or return connection instance. * * @return PDO Instance of PDO connection */ private static function _connect() { // do we have an instance already? if (!self::$instance instanceof PDO) { try { // which driver are we using? switch (strtolower(DB_DRIVER)) { // MySQL case 'mysql': self::$instance = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';unix_socket=/var/run/mysqld/mysqld.sock', DB_USER, DB_PASS); break; // PostgreSQL (untested) // PostgreSQL (untested) case 'pgsql': self::$instance = new PDO('pgsql:dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS); break; // SQLite 3 that can only be under BASEPATH // SQLite 3 that can only be under BASEPATH case 'sqlite': self::$instance = new PDO('sqlite:' . BASEPATH . '/' . DB_NAME); break; } // error mode on, throw exceptions self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $exception) { try { throw new Fari_Exception('Cannot connect to DB: ' . $exception->getMessage() . '.'); } catch (Fari_Exception $exception) { $exception->fire(); } } } return self::$instance; }