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.

65 lines
1.8 KiB

<?php
/**
* @copyright NetMonsters <team@netmonsters.ru>
* @link http://netmonsters.ru
* @package Majestic
* @subpackage db
* @since 2010-02-16
*/
namespace Majestic;
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(\Majestic\Config::get(__CLASS__))) {
throw new \InitializationException('Trying to get property of non-object');
}
$config = \Majestic\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];
}
}