converted to unix-style eol
[www-register-wizard.git] / database / DB.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * CodeIgniter
4  *
5  * An open source application development framework for PHP 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008, EllisLab, Inc.
10  * @license             http://codeigniter.com/user_guide/license.html
11  * @link                http://codeigniter.com
12  * @since               Version 1.0
13  * @filesource
14  */
15
16 // ------------------------------------------------------------------------
17
18 /**
19  * Initialize the database
20  *
21  * @category    Database
22  * @author              ExpressionEngine Dev Team
23  * @link                http://codeigniter.com/user_guide/database/
24  */
25 function &DB($params = '', $active_record_override = FALSE)
26 {
27         // Load the DB config file if a DSN string wasn't passed
28         if (is_string($params) AND strpos($params, '://') === FALSE)
29         {
30                 include(APPPATH.'config/database'.EXT);
31                 
32                 if ( ! isset($db) OR count($db) == 0)
33                 {
34                         show_error('No database connection settings were found in the database config file.');
35                 }
36                 
37                 if ($params != '')
38                 {
39                         $active_group = $params;
40                 }
41                 
42                 if ( ! isset($active_group) OR ! isset($db[$active_group]))
43                 {
44                         show_error('You have specified an invalid database connection group.');
45                 }
46                 
47                 $params = $db[$active_group];
48         }
49         elseif (is_string($params))
50         {
51                 
52                 /* parse the URL from the DSN string
53                 *  Database settings can be passed as discreet
54                 *  parameters or as a data source name in the first
55                 *  parameter. DSNs must have this prototype:
56                 *  $dsn = 'driver://username:password@hostname/database';
57                 */
58         
59                 if (($dns = @parse_url($params)) === FALSE)
60                 {
61                         show_error('Invalid DB Connection String');
62                 }
63                 
64                 $params = array(
65                                                         'dbdriver'      => $dns['scheme'],
66                                                         'hostname'      => (isset($dns['host'])) ? rawurldecode($dns['host']) : '',
67                                                         'username'      => (isset($dns['user'])) ? rawurldecode($dns['user']) : '',
68                                                         'password'      => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '',
69                                                         'database'      => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : ''
70                                                 );
71                 
72                 // were additional config items set?
73                 if (isset($dns['query']))
74                 {
75                         parse_str($dns['query'], $extra);
76
77                         foreach($extra as $key => $val)
78                         {
79                                 // booleans please
80                                 if (strtoupper($val) == "TRUE")
81                                 {
82                                         $val = TRUE;
83                                 }
84                                 elseif (strtoupper($val) == "FALSE")
85                                 {
86                                         $val = FALSE;
87                                 }
88
89                                 $params[$key] = $val;
90                         }
91                 }
92         }
93         
94         // No DB specified yet?  Beat them senseless...
95         if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
96         {
97                 show_error('You have not selected a database type to connect to.');
98         }
99
100         // Load the DB classes.  Note: Since the active record class is optional
101         // we need to dynamically create a class that extends proper parent class
102         // based on whether we're using the active record class or not.
103         // Kudos to Paul for discovering this clever use of eval()
104         
105         if ($active_record_override == TRUE)
106         {
107                 $active_record = TRUE;
108         }
109         
110         require_once(BASEPATH.'database/DB_driver'.EXT);
111
112         if ( ! isset($active_record) OR $active_record == TRUE)
113         {
114                 require_once(BASEPATH.'database/DB_active_rec'.EXT);
115                 
116                 if ( ! class_exists('CI_DB'))
117                 {
118                         eval('class CI_DB extends CI_DB_active_record { }');
119                 }
120         }
121         else
122         {
123                 if ( ! class_exists('CI_DB'))
124                 {
125                         eval('class CI_DB extends CI_DB_driver { }');
126                 }
127         }
128                         
129         require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
130
131         // Instantiate the DB adapter
132         $driver = 'CI_DB_'.$params['dbdriver'].'_driver';
133         $DB =& new $driver($params);
134         
135         if ($DB->autoinit == TRUE)
136         {
137                 $DB->initialize();
138         }
139         
140         return $DB;
141 }       
142
143
144
145 /* End of file DB.php */
146 /* Location: ./system/database/DB.php */