From 97bc010749830b183fffa7c5faf29744c095864e Mon Sep 17 00:00:00 2001 From: Derek Jones Date: Wed, 14 May 2008 15:01:50 +0000 Subject: fixed bug #3419 where the 'database' setting for DSN connections was using the host portion of the URL instead of the path. Added ability to set other db config values in DSN connections via query string --- system/database/DB.php | 25 +++++++++++++++++++++++-- system/database/DB_driver.php | 2 ++ user_guide/changelog.html | 13 +++++++++++++ user_guide/database/connecting.html | 5 ++++- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/system/database/DB.php b/system/database/DB.php index 2446645a7..eb25273a1 100644 --- a/system/database/DB.php +++ b/system/database/DB.php @@ -66,10 +66,31 @@ function &DB($params = '', $active_record_override = FALSE) 'hostname' => (isset($dns['host'])) ? rawurldecode($dns['host']) : '', 'username' => (isset($dns['user'])) ? rawurldecode($dns['user']) : '', 'password' => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '', - 'database' => (isset($dns['path'])) ? rawurldecode(substr($dns['host'], 1)) : '' + 'database' => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : '' ); + + // were additional config items set? + if (isset($dns['query'])) + { + parse_str($dns['query'], $extra); + + foreach($extra as $key => $val) + { + // booleans please + if (strtoupper($val) == "TRUE") + { + $val = TRUE; + } + elseif (strtoupper($val) == "FALSE") + { + $val = FALSE; + } + + $params[$key] = $val; + } + } } - + // No DB specified yet? Beat them senseless... if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '') { diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php index a0833d0ce..c9cece621 100644 --- a/system/database/DB_driver.php +++ b/system/database/DB_driver.php @@ -36,6 +36,8 @@ class CI_DB_driver { var $database; var $dbdriver = 'mysql'; var $dbprefix = ''; + var $char_set = ''; + var $dbcollat = ''; var $autoinit = TRUE; // Whether to automatically initialize the DB var $swap_pre = ''; var $port = ''; diff --git a/user_guide/changelog.html b/user_guide/changelog.html index de1818cb9..0d7265e89 100644 --- a/user_guide/changelog.html +++ b/user_guide/changelog.html @@ -60,8 +60,21 @@ Change Log

Version 1.6.3

Release Date: not currently released
SVN Revision: not currently released

+ +

Bug fixes for 1.6.3

+ + +

Version 1.6.2

Release Date: May 13, 2008
SVN Revision: 1155

diff --git a/user_guide/database/connecting.html b/user_guide/database/connecting.html index ee2d8c08f..bc4b2e7e7 100644 --- a/user_guide/database/connecting.html +++ b/user_guide/database/connecting.html @@ -117,8 +117,11 @@ $this->load->database($config);
$this->load->database($dsn); -

Note that if you use a DSN you will not be able to specify some of the default values like you can if you use a connection array.

+

To override default config values when connecting with a DSN string, add the config variables as a query string.

+$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
+
+$this->load->database($dsn);

Connecting to Multiple Databases

-- cgit v1.2.3-24-g4f1b