/** * Build DSN connection string for DB driver instantiate process * * @param string Group name * @return string DSN Connection string */ public function set_dsn($group = 'default') { if (!isset($this->config[$group])) { throw new InvalidArgumentException('Group ' . $group . ' not exists'); } self::$dbdriver = $this->config[$group]['dbdriver']; if (isset($this->config[$group]['subdriver'])) { self::$subdriver = $this->config[$group]['subdriver']; } $params = array('dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => FALSE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'stricton' => FALSE); $config = array_merge($this->config[$group], $params); $dsnstring = empty($config['dsn']) ? FALSE : $config['dsn']; $subdriver = empty($config['subdriver']) ? FALSE : $config['subdriver']; $failover = empty($config['failover']) ? FALSE : $config['failover']; $dsn = $config['dbdriver'] . '://' . $config['username'] . ':' . $config['password'] . '@' . $config['hostname'] . '/' . $config['database']; // Build the parameter $other_params = array_slice($config, 6); if ($dsnstring) { $other_params['dsn'] = $dsnstring; } if ($subdriver) { $other_params['subdriver'] = $subdriver; } if ($failover) { $other_params['failover'] = $failover; } return $dsn . '?' . http_build_query($other_params); }