public function connect($args = null)
{
if (!$args) {
throw new \Exception('Invalid DB config.');
}
$options = [];
// will overwrite any existing args
if ($args['url']) {
$args = array_merge($this->parseUrl($args['url']), $args);
}
if ($args['persistent']) {
$options[\PDO::ATTR_PERSISTENT] = true;
}
if ($args['sslca']) {
$options[\PDO::MYSQL_ATTR_SSL_CA] = $args['sslca'];
$options[\PDO::ATTR_TIMEOUT] = 4;
$options[\PDO::ATTR_ERRMODE] = \PDO::ERRMODE_EXCEPTION;
}
if (!$args['driver']) {
$args['driver'] = 'mysql';
}
if ($args['driver'] == 'postgres') {
$args['driver'] = 'pgsql';
}
if ($args['driver'] == 'mysql') {
$args['charset'] = 'utf8';
}
if (!$args['dsn']) {
$args['dsn'] = $args['driver'] . ':host=' . $args['host'] . ($args['port'] ? ';port=' . $args['port'] : '') . ';dbname=' . $args['database'] . ($args['charset'] ? ';charset=' . $args['charset'] : '');
}
$db = new \PDO($args['dsn'], $args['user'], $args['pass'], $options);
$this->_driver = $db->getAttribute(\PDO::ATTR_DRIVER_NAME);
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$db->setAttribute(\PDO::ATTR_EMULATE_PREPARES, $args['sslca'] ? true : false);
$this->db($db);
return $this;
}