$host, 'user' => $user, 'password' => $password, 'database' => $database, 'link' => false, 'multiple' => 0, 'encoding' => 'UTF8', ); return true; } public static function setDefaultConnection($id) { self::$default_connection = $id; } public static function setEncoding($id, $encoding) { if (!isset(self::$connections[$id])) return false; self::$connections[$id]['encoding'] = $encoding; } public static function startMultipleQueries($connection=false) { $connection = self::getConnectionId($connection); self::$connections[$connection]['multiple'] += 1; } public static function endMultipleQueries($connection=false) { $connection = self::getConnectionId($connection); self::$connections[$connection]['multiple'] -= 1; if (empty(self::$connections[$connection]['multiple'])) self::Close($connection); } public static function isMultiple($connection=false) { $connection = self::getConnectionId($connection); $is_multiple = (self::$connections[$connection]['multiple'] > 0) ? true : false; return $is_multiple; } public static function Connect($connection=false) { $connection = self::getConnectionId($connection); $config =& self::$connections[$connection]; if (empty($config['host']) || empty($config['user']) || !isset($config['password'])) { throw new DB_Exception("Invalid connection parameters for connection ".$connection."."); } $config['link'] = new PDO(sprintf('mysql:host=%s;dbname=%s;charset=%s', $config['host'], $config['database'], $config['encoding']), $config['user'], $config['password']); return true; } private static function getConnectionId($connection = false) { if (empty($connection)) { if (!self::$default_connection) throw new DB_Exception("No connection selected and no default connection set."); $connection = self::$default_connection; } return $connection; } private static function &getLink($connection = false) { $connection = self::getConnectionId($connection); if (empty(self::$connections[$connection]['link'])) self::Connect($connection); return self::$connections[$connection]['link']; } public static function query($query, $connection=false) { $connection = self::getConnectionId($connection); $pdo = self::getLink($connection); $result = $pdo->query($query); return $result; } public static function fetchRow($result, $fetch_mode=false) { if (!$fetch_mode) $fetch_mode = DB::FETCH_BOTH; return $result->fetch($fetch_mode); } public static function arrayQuery($query, $connection=false, $fetch_mode=false) { if (!$fetch_mode) $fetch_mode = DB::FETCH_BOTH; return self::query($query, $connection)->fetchAll($fetch_mode); } public static function unbufferedQuery($query, $connection=false) { return self::query($query, $connection); } public static function execQuery($query, $connection=false) { $connection = self::getConnectionId($connection); $lines = explode(';', $query); foreach ($lines as $line) { $line = trim($line); if (empty($line)) continue; self::query($query, $connection); } return true; } public static function Close($connection=false) { } public static function q($query, $connection=false) { return self::query($query, $connection); } public static function aQuery($query, $connection=false, $fetch_mode=false) { return self::arrayQuery($query, $connection, $fetch_mode); } public static function uQuery($query, $connection=false) { return self::unbufferedQuery($query, $connection); } public static function eQuery($query) { return self::execQuery($query); } public static function getInsertId($connection=false) { return self::getLink($connection)->lastInsertId(); } public static function escape($str, $connection=false) { if (is_array($str) || is_object($str)) throw new DB_Exception("Trying to escape non-string variable of type ".gettype($str).": ".print_r($str, true)); return substr(self::getLink($connection)->quote($str), 1, -1); } public static function e($str, $connection=false) { return self::escape($str, $connection); } public static function esc($str, $connection=false) { return self::escape($str, $connection); } }