You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
<?php
|
|
/**
|
|
* @copyright NetMonsters <team@netmonsters.ru>
|
|
* @link http://netmonsters.ru
|
|
* @package Majestic
|
|
* @subpackage db
|
|
* @since 2010-02-16
|
|
*/
|
|
|
|
class Db
|
|
{
|
|
|
|
const FETCH_ASSOC = 2;
|
|
const FETCH_NUM = 3;
|
|
const FETCH_BOTH = 4;
|
|
const FETCH_OBJ = 5;
|
|
|
|
/**
|
|
* Databases connections
|
|
*
|
|
* @var array
|
|
*/
|
|
static protected $connections = array();
|
|
|
|
/**
|
|
* Connect to database
|
|
*
|
|
* @param string $name Database name. If not set 'default' will be used.
|
|
* @param array $config Configuration array.
|
|
*
|
|
* @return DbDriver
|
|
* @throws InitializationException
|
|
*/
|
|
static public function connect($name = 'default', $config = null)
|
|
{
|
|
if (!isset(self::$connections[$name])) {
|
|
if (!$config) {
|
|
if (!is_object(Config::get(__CLASS__))) {
|
|
throw new InitializationException('Trying to get property of non-object');
|
|
}
|
|
$config = Config::get(__CLASS__)->$name;
|
|
}
|
|
|
|
if (!is_array($config)) {
|
|
throw new InitializationException('Connection parameters must be an array');
|
|
}
|
|
|
|
$driver = 'MySQLiDriver';
|
|
if (isset($config['driver'])) {
|
|
$driver = $config['driver'];
|
|
unset($config['driver']);
|
|
}
|
|
|
|
$connection = new $driver($config);
|
|
|
|
if (!$connection instanceof DbDriver) {
|
|
throw new InitializationException('Database driver must extends DbDriver');
|
|
}
|
|
self::$connections[$name] = $connection;
|
|
}
|
|
return self::$connections[$name];
|
|
}
|
|
}
|