blob: 9b8117076733e7e4a06264e698cd5a22ed3c452c [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001###########################
2Connecting to your Database
3###########################
4
5There are two ways to connect to a database:
6
7Automatically Connecting
8========================
9
10The "auto connect" feature will load and instantiate the database class
11with every page load. To enable "auto connecting", add the word database
12to the library array, as indicated in the following file:
13
14application/config/autoload.php
15
16Manually Connecting
17===================
18
19If only some of your pages require database connectivity you can
20manually connect to your database by adding this line of code in any
21function where it is needed, or in your class constructor to make the
22database available globally in that class.
23
24::
25
26 $this->load->database();
27
28If the above function does **not** contain any information in the first
29parameter it will connect to the group specified in your database config
30file. For most people, this is the preferred method of use.
31
32Available Parameters
33--------------------
34
35#. The database connection values, passed either as an array or a DSN
36 string.
37#. TRUE/FALSE (boolean). Whether to return the connection ID (see
38 Connecting to Multiple Databases below).
Jamie Rumbelow7efad202012-02-19 12:37:00 +000039#. TRUE/FALSE (boolean). Whether to enable the Query Builder class. Set
Derek Jones8ede1a22011-10-05 13:34:52 -050040 to TRUE by default.
41
42Manually Connecting to a Database
43---------------------------------
44
45The first parameter of this function can **optionally** be used to
46specify a particular database group from your config file, or you can
47even submit connection values for a database that is not specified in
48your config file. Examples:
49
50To choose a specific group from your config file you can do this::
51
52 $this->load->database('group_name');
53
54Where group_name is the name of the connection group from your config
55file.
56
57To connect manually to a desired database you can pass an array of
58values::
59
Andrey Andreevb94b91a2012-07-04 12:32:14 +030060 $config['hostname'] = 'localhost';
61 $config['username'] = 'myusername';
62 $config['password'] = 'mypassword';
63 $config['database'] = 'mydatabase';
64 $config['dbdriver'] = 'mysqli';
65 $config['dbprefix'] = '';
66 $config['pconnect'] = FALSE;
67 $config['db_debug'] = TRUE;
68 $config['cache_on'] = FALSE;
69 $config['cachedir'] = '';
70 $config['char_set'] = 'utf8';
71 $config['dbcollat'] = 'utf8_general_ci';
Timothy Warren5c3aaca2011-10-31 13:31:30 -030072 $this->load->database($config);
Derek Jones8ede1a22011-10-05 13:34:52 -050073
74For information on each of these values please see the :doc:`configuration
75page <configuration>`.
76
Andrey Andreevb94b91a2012-07-04 12:32:14 +030077.. note:: For the PDO driver, you should use the $config['dsn'] setting
78 instead of 'hostname' and 'database':
79
80 |
81 | $config['dsn'] = 'mysql:host=localhost;dbname=mydatabase';
Derek Jones8ede1a22011-10-05 13:34:52 -050082
83Or you can submit your database values as a Data Source Name. DSNs must
84have this prototype::
85
Timothy Warren5c3aaca2011-10-31 13:31:30 -030086 $dsn = 'dbdriver://username:password@hostname/database';
87 $this->load->database($dsn);
Derek Jones8ede1a22011-10-05 13:34:52 -050088
89To override default config values when connecting with a DSN string, add
90the config variables as a query string.
91
92::
93
Timothy Warren5c3aaca2011-10-31 13:31:30 -030094 $dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
95 $this->load->database($dsn);
Derek Jones8ede1a22011-10-05 13:34:52 -050096
97Connecting to Multiple Databases
98================================
99
100If you need to connect to more than one database simultaneously you can
101do so as follows::
102
Timothy Warren5c3aaca2011-10-31 13:31:30 -0300103 $DB1 = $this->load->database('group_one', TRUE);
104 $DB2 = $this->load->database('group_two', TRUE);
Derek Jones8ede1a22011-10-05 13:34:52 -0500105
106Note: Change the words "group_one" and "group_two" to the specific
107group names you are connecting to (or you can pass the connection values
108as indicated above).
109
110By setting the second parameter to TRUE (boolean) the function will
111return the database object.
112
Joseph Wensleyf24f4042011-10-06 22:53:29 -0400113.. note:: When you connect this way, you will use your object name to issue
114 commands rather than the syntax used throughout this guide. In other
115 words, rather than issuing commands with:
116
117 |
118 | $this->db->query();
119 | $this->db->result();
120 | etc...
121 |
122 | You will instead use:
123 |
124 | $DB1->query();
125 | $DB1->result();
126 | etc...
Derek Jones8ede1a22011-10-05 13:34:52 -0500127
Andrey Andreev11454e02012-02-22 16:05:47 +0200128.. note:: You don't need to create separate database configurations if you
129 only need to use a different database on the same connection. You
130 can switch to a different database when you need to, like this:
131
132 | $this->db->db_select($database2_name);
133
Derek Jones8ede1a22011-10-05 13:34:52 -0500134Reconnecting / Keeping the Connection Alive
135===========================================
136
137If the database server's idle timeout is exceeded while you're doing
138some heavy PHP lifting (processing an image, for instance), you should
139consider pinging the server by using the reconnect() method before
140sending further queries, which can gracefully keep the connection alive
141or re-establish it.
142
143::
144
145 $this->db->reconnect();
146
147Manually closing the Connection
148===============================
149
150While CodeIgniter intelligently takes care of closing your database
151connections, you can explicitly close the connection.
152
153::
154
Andrey Andreevb94b91a2012-07-04 12:32:14 +0300155 $this->db->close();