CodeIgniter installed
[living-lab-site.git] / system / 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 5.1.6 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008 - 2011, 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 = NULL)
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                 // Is the config file in the environment folder?
31                 if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/database'.EXT))
32                 {
33                         if ( ! file_exists($file_path = APPPATH.'config/database'.EXT))
34                         {
35                                 show_error('The configuration file database'.EXT.' does not exist.');
36                         }
37                 }
38                 
39                 include($file_path);
40
41                 if ( ! isset($db) OR count($db) == 0)
42                 {
43                         show_error('No database connection settings were found in the database config file.');
44                 }
45
46                 if ($params != '')
47                 {
48                         $active_group = $params;
49                 }
50
51                 if ( ! isset($active_group) OR ! isset($db[$active_group]))
52                 {
53                         show_error('You have specified an invalid database connection group.');
54                 }
55
56                 $params = $db[$active_group];
57         }
58         elseif (is_string($params))
59         {
60
61                 /* parse the URL from the DSN string
62                  *  Database settings can be passed as discreet
63                  *  parameters or as a data source name in the first
64                  *  parameter. DSNs must have this prototype:
65                  *  $dsn = 'driver://username:password@hostname/database';
66                  */
67
68                 if (($dns = @parse_url($params)) === FALSE)
69                 {
70                         show_error('Invalid DB Connection String');
71                 }
72
73                 $params = array(
74                                                         'dbdriver'      => $dns['scheme'],
75                                                         'hostname'      => (isset($dns['host'])) ? rawurldecode($dns['host']) : '',
76                                                         'username'      => (isset($dns['user'])) ? rawurldecode($dns['user']) : '',
77                                                         'password'      => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '',
78                                                         'database'      => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : ''
79                                                 );
80
81                 // were additional config items set?
82                 if (isset($dns['query']))
83                 {
84                         parse_str($dns['query'], $extra);
85
86                         foreach ($extra as $key => $val)
87                         {
88                                 // booleans please
89                                 if (strtoupper($val) == "TRUE")
90                                 {
91                                         $val = TRUE;
92                                 }
93                                 elseif (strtoupper($val) == "FALSE")
94                                 {
95                                         $val = FALSE;
96                                 }
97
98                                 $params[$key] = $val;
99                         }
100                 }
101         }
102
103         // No DB specified yet?  Beat them senseless...
104         if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
105         {
106                 show_error('You have not selected a database type to connect to.');
107         }
108
109         // Load the DB classes.  Note: Since the active record class is optional
110         // we need to dynamically create a class that extends proper parent class
111         // based on whether we're using the active record class or not.
112         // Kudos to Paul for discovering this clever use of eval()
113
114         if ($active_record_override !== NULL)
115         {
116                 $active_record = $active_record_override;
117         }
118
119         require_once(BASEPATH.'database/DB_driver'.EXT);
120
121         if ( ! isset($active_record) OR $active_record == TRUE)
122         {
123                 require_once(BASEPATH.'database/DB_active_rec'.EXT);
124
125                 if ( ! class_exists('CI_DB'))
126                 {
127                         eval('class CI_DB extends CI_DB_active_record { }');
128                 }
129         }
130         else
131         {
132                 if ( ! class_exists('CI_DB'))
133                 {
134                         eval('class CI_DB extends CI_DB_driver { }');
135                 }
136         }
137
138         require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
139
140         // Instantiate the DB adapter
141         $driver = 'CI_DB_'.$params['dbdriver'].'_driver';
142         $DB = new $driver($params);
143
144         if ($DB->autoinit == TRUE)
145         {
146                 $DB->initialize();
147         }
148
149         if (isset($params['stricton']) && $params['stricton'] == TRUE)
150         {
151                 $DB->query('SET SESSION sql_mode="STRICT_ALL_TABLES"');
152         }
153
154         return $DB;
155 }
156
157
158
159 /* End of file DB.php */
160 /* Location: ./system/database/DB.php */