diff options
author | Derek Jones <derek.jones@ellislab.com> | 2008-02-13 05:52:58 +0100 |
---|---|---|
committer | Derek Jones <derek.jones@ellislab.com> | 2008-02-13 05:52:58 +0100 |
commit | 7dd3838f188f35d63a30c30b435fbb7f2e2d3d7e (patch) | |
tree | 5d7545439c0c5a7159368f30fd86905a27eaa8c8 /system/database/DB.php | |
parent | 5b4d53271a841c60e43d64f4b6b3c32794b41ac7 (diff) |
fixed bug #3419, moved DSN parsing to DB.php so the driver could properly be set to instantiate the correct db driver class.
Diffstat (limited to 'system/database/DB.php')
-rw-r--r-- | system/database/DB.php | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/system/database/DB.php b/system/database/DB.php index 078f1ef0f..c3e7722d3 100644 --- a/system/database/DB.php +++ b/system/database/DB.php @@ -46,6 +46,29 @@ function &DB($params = '', $active_record_override = FALSE) $params = $db[$active_group];
}
+ else
+ {
+
+ /* parse the URL from the DSN string
+ * Database settings can be passed as discreet
+ * parameters or as a data source name in the first
+ * parameter. DSNs must have this prototype:
+ * $dsn = 'driver://username:password@hostname/database';
+ */
+
+ if (($dns = @parse_url($params)) === FALSE)
+ {
+ show_error('Invalid DB Connection String');
+ }
+
+ $params = array(
+ 'dbdriver' => $dns['scheme'],
+ '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)) : ''
+ );
+ }
// No DB specified yet? Beat them senseless...
if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
|