blob: 0a6d98744e0f296147f91d7a160c06e1710cbe00 [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001###################
Jamie Rumbelow7efad202012-02-19 12:37:00 +00002Query Builder Class
Derek Jones8ede1a22011-10-05 13:34:52 -05003###################
4
David Wosnitzad31a4e62014-12-12 16:35:35 +01005CodeIgniter gives you access to a Query Builder class. This pattern
6allows information to be retrieved, inserted, and updated in your
Jamie Rumbelow7efad202012-02-19 12:37:00 +00007database with minimal scripting. In some cases only one or two lines
8of code are necessary to perform a database action.
Derek Jones8ede1a22011-10-05 13:34:52 -05009CodeIgniter does not require that each database table be its own class
10file. It instead provides a more simplified interface.
11
Jamie Rumbelow7efad202012-02-19 12:37:00 +000012Beyond simplicity, a major benefit to using the Query Builder features
Derek Jones8ede1a22011-10-05 13:34:52 -050013is that it allows you to create database independent applications, since
14the query syntax is generated by each database adapter. It also allows
15for safer queries, since the values are escaped automatically by the
16system.
17
18.. note:: If you intend to write your own queries you can disable this
19 class in your database config file, allowing the core database library
20 and adapter to utilize fewer resources.
21
James L Parry42a7df62014-11-25 12:06:49 -080022.. contents::
23 :local:
24 :depth: 1
Derek Jones8ede1a22011-10-05 13:34:52 -050025
26**************
27Selecting Data
28**************
29
30The following functions allow you to build SQL **SELECT** statements.
31
James L Parry141288d2014-12-06 01:45:12 -080032**$this->db->get()**
Derek Jones8ede1a22011-10-05 13:34:52 -050033
34Runs the selection query and returns the result. Can be used by itself
35to retrieve all records from a table::
36
37 $query = $this->db->get('mytable'); // Produces: SELECT * FROM mytable
38
39The second and third parameters enable you to set a limit and offset
40clause::
41
42 $query = $this->db->get('mytable', 10, 20);
Andrey Andreev4fce5c42014-12-11 17:11:48 +020043
44 // Executes: SELECT * FROM mytable LIMIT 20, 10
45 // (in MySQL. Other databases have slightly different syntax)
Derek Jones8ede1a22011-10-05 13:34:52 -050046
47You'll notice that the above function is assigned to a variable named
48$query, which can be used to show the results::
49
50 $query = $this->db->get('mytable');
WanWizard7219c072011-12-28 14:09:05 +010051
Derek Jones8ede1a22011-10-05 13:34:52 -050052 foreach ($query->result() as $row)
53 {
54 echo $row->title;
55 }
56
57Please visit the :doc:`result functions <results>` page for a full
58discussion regarding result generation.
59
James L Parry141288d2014-12-06 01:45:12 -080060**$this->db->get_compiled_select()**
James L Parry42a7df62014-11-25 12:06:49 -080061
62Compiles the selection query just like **$this->db->get()** but does not *run*
Kyle Farris48d8fb62011-10-14 17:59:49 -030063the query. This method simply returns the SQL query as a string.
64
65Example::
66
67 $sql = $this->db->get_compiled_select('mytable');
68 echo $sql;
WanWizard7219c072011-12-28 14:09:05 +010069
Andrey Andreev4fce5c42014-12-11 17:11:48 +020070 // Prints string: SELECT * FROM mytable
WanWizard7219c072011-12-28 14:09:05 +010071
Jamie Rumbelow7efad202012-02-19 12:37:00 +000072The second parameter enables you to set whether or not the query builder query
GDmac01e9fb12013-11-09 08:01:52 +010073will be reset (by default it will be reset, just like when using `$this->db->get()`)::
Kyle Farris48d8fb62011-10-14 17:59:49 -030074
75 echo $this->db->limit(10,20)->get_compiled_select('mytable', FALSE);
Andrey Andreev4fce5c42014-12-11 17:11:48 +020076
77 // Prints string: SELECT * FROM mytable LIMIT 20, 10
Kyle Farris48d8fb62011-10-14 17:59:49 -030078 // (in MySQL. Other databases have slightly different syntax)
WanWizard7219c072011-12-28 14:09:05 +010079
Kyle Farris48d8fb62011-10-14 17:59:49 -030080 echo $this->db->select('title, content, date')->get_compiled_select();
81
Andrey Andreev4fce5c42014-12-11 17:11:48 +020082 // Prints string: SELECT title, content, date FROM mytable LIMIT 20, 10
WanWizard7219c072011-12-28 14:09:05 +010083
84The key thing to notice in the above example is that the second query did not
James L Parry42a7df62014-11-25 12:06:49 -080085utilize **$this->db->from()** and did not pass a table name into the first
WanWizard7219c072011-12-28 14:09:05 +010086parameter. The reason for this outcome is because the query has not been
James L Parry42a7df62014-11-25 12:06:49 -080087executed using **$this->db->get()** which resets values or reset directly
88using **$this->db->reset_query()**.
Kyle Farris48d8fb62011-10-14 17:59:49 -030089
James L Parry141288d2014-12-06 01:45:12 -080090**$this->db->get_where()**
Derek Jones8ede1a22011-10-05 13:34:52 -050091
92Identical to the above function except that it permits you to add a
93"where" clause in the second parameter, instead of using the db->where()
94function::
95
96 $query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
97
98Please read the about the where function below for more information.
99
Greg Akerffd24a42011-12-25 22:27:59 -0600100.. note:: get_where() was formerly known as getwhere(), which has been removed
Derek Jones8ede1a22011-10-05 13:34:52 -0500101
James L Parry141288d2014-12-06 01:45:12 -0800102**$this->db->select()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500103
104Permits you to write the SELECT portion of your query::
105
106 $this->db->select('title, content, date');
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200107 $query = $this->db->get('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500108
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200109 // Executes: SELECT title, content, date FROM mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500110
111.. note:: If you are selecting all (\*) from a table you do not need to
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200112 use this function. When omitted, CodeIgniter assumes that you wish
David Wosnitzad31a4e62014-12-12 16:35:35 +0100113 to select all fields and automatically adds 'SELECT \*'.
Derek Jones8ede1a22011-10-05 13:34:52 -0500114
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200115``$this->db->select()`` accepts an optional second parameter. If you set it
David Wosnitzad31a4e62014-12-12 16:35:35 +0100116to FALSE, CodeIgniter will not try to protect your field or table names.
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200117This is useful if you need a compound select statement where automatic
118escaping of fields may break them.
Derek Jones8ede1a22011-10-05 13:34:52 -0500119
120::
121
WanWizard7219c072011-12-28 14:09:05 +0100122 $this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE);
Derek Jones8ede1a22011-10-05 13:34:52 -0500123 $query = $this->db->get('mytable');
124
James L Parry141288d2014-12-06 01:45:12 -0800125**$this->db->select_max()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500126
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200127Writes a ``SELECT MAX(field)`` portion for your query. You can optionally
Derek Jones8ede1a22011-10-05 13:34:52 -0500128include a second parameter to rename the resulting field.
129
130::
131
132 $this->db->select_max('age');
133 $query = $this->db->get('members'); // Produces: SELECT MAX(age) as age FROM members
WanWizard7219c072011-12-28 14:09:05 +0100134
Derek Jones8ede1a22011-10-05 13:34:52 -0500135 $this->db->select_max('age', 'member_age');
136 $query = $this->db->get('members'); // Produces: SELECT MAX(age) as member_age FROM members
137
138
James L Parry42a7df62014-11-25 12:06:49 -0800139**$this->db->select_min()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500140
141Writes a "SELECT MIN(field)" portion for your query. As with
142select_max(), You can optionally include a second parameter to rename
143the resulting field.
144
145::
146
147 $this->db->select_min('age');
148 $query = $this->db->get('members'); // Produces: SELECT MIN(age) as age FROM members
149
150
James L Parry42a7df62014-11-25 12:06:49 -0800151**$this->db->select_avg()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500152
153Writes a "SELECT AVG(field)" portion for your query. As with
154select_max(), You can optionally include a second parameter to rename
155the resulting field.
156
157::
158
159 $this->db->select_avg('age');
160 $query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members
161
162
James L Parry42a7df62014-11-25 12:06:49 -0800163**$this->db->select_sum()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500164
165Writes a "SELECT SUM(field)" portion for your query. As with
166select_max(), You can optionally include a second parameter to rename
167the resulting field.
168
169::
170
171 $this->db->select_sum('age');
172 $query = $this->db->get('members'); // Produces: SELECT SUM(age) as age FROM members
173
James L Parry141288d2014-12-06 01:45:12 -0800174**$this->db->from()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500175
176Permits you to write the FROM portion of your query::
177
178 $this->db->select('title, content, date');
179 $this->db->from('mytable');
180 $query = $this->db->get(); // Produces: SELECT title, content, date FROM mytable
181
182.. note:: As shown earlier, the FROM portion of your query can be specified
183 in the $this->db->get() function, so use whichever method you prefer.
184
James L Parry141288d2014-12-06 01:45:12 -0800185**$this->db->join()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500186
187Permits you to write the JOIN portion of your query::
188
189 $this->db->select('*');
190 $this->db->from('blogs');
191 $this->db->join('comments', 'comments.id = blogs.id');
192 $query = $this->db->get();
WanWizard7219c072011-12-28 14:09:05 +0100193
Derek Jones8ede1a22011-10-05 13:34:52 -0500194 // Produces:
kenjisc35d2c92011-10-26 17:09:17 +0900195 // SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
Derek Jones8ede1a22011-10-05 13:34:52 -0500196
197Multiple function calls can be made if you need several joins in one
198query.
199
200If you need a specific type of JOIN you can specify it via the third
201parameter of the function. Options are: left, right, outer, inner, left
202outer, and right outer.
203
204::
205
206 $this->db->join('comments', 'comments.id = blogs.id', 'left');
207 // Produces: LEFT JOIN comments ON comments.id = blogs.id
208
James L Parry42a7df62014-11-25 12:06:49 -0800209*************************
210Looking for Specific Data
211*************************
212
James L Parry141288d2014-12-06 01:45:12 -0800213**$this->db->where()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500214
215This function enables you to set **WHERE** clauses using one of four
216methods:
217
218.. note:: All values passed to this function are escaped automatically,
219 producing safer queries.
220
221#. **Simple key/value method:**
222
223 ::
224
WanWizard7219c072011-12-28 14:09:05 +0100225 $this->db->where('name', $name); // Produces: WHERE name = 'Joe'
Derek Jones8ede1a22011-10-05 13:34:52 -0500226
227 Notice that the equal sign is added for you.
228
229 If you use multiple function calls they will be chained together with
230 AND between them:
231
232 ::
233
234 $this->db->where('name', $name);
235 $this->db->where('title', $title);
236 $this->db->where('status', $status);
WanWizard7219c072011-12-28 14:09:05 +0100237 // WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Derek Jones8ede1a22011-10-05 13:34:52 -0500238
239#. **Custom key/value method:**
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200240
Derek Jones8ede1a22011-10-05 13:34:52 -0500241 You can include an operator in the first parameter in order to
242 control the comparison:
243
244 ::
245
246 $this->db->where('name !=', $name);
WanWizard7219c072011-12-28 14:09:05 +0100247 $this->db->where('id <', $id); // Produces: WHERE name != 'Joe' AND id < 45
Derek Jones8ede1a22011-10-05 13:34:52 -0500248
249#. **Associative array method:**
250
251 ::
252
253 $array = array('name' => $name, 'title' => $title, 'status' => $status);
254 $this->db->where($array);
WanWizard7219c072011-12-28 14:09:05 +0100255 // Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Derek Jones8ede1a22011-10-05 13:34:52 -0500256
257 You can include your own operators using this method as well:
258
259 ::
260
261 $array = array('name !=' => $name, 'id <' => $id, 'date >' => $date);
262 $this->db->where($array);
263
264#. **Custom string:**
265 You can write your own clauses manually::
266
267 $where = "name='Joe' AND status='boss' OR status='active'";
268 $this->db->where($where);
269
270
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200271``$this->db->where()`` accepts an optional third parameter. If you set it to
272FALSE, CodeIgniter will not try to protect your field or table names.
Derek Jones8ede1a22011-10-05 13:34:52 -0500273
274::
275
276 $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
277
James L Parry42a7df62014-11-25 12:06:49 -0800278**$this->db->or_where()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500279
280This function is identical to the one above, except that multiple
281instances are joined by OR::
282
283 $this->db->where('name !=', $name);
284 $this->db->or_where('id >', $id); // Produces: WHERE name != 'Joe' OR id > 50
285
286.. note:: or_where() was formerly known as orwhere(), which has been
287 removed.
288
James L Parry141288d2014-12-06 01:45:12 -0800289**$this->db->where_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500290
291Generates a WHERE field IN ('item', 'item') SQL query joined with AND if
292appropriate
293
294::
295
296 $names = array('Frank', 'Todd', 'James');
297 $this->db->where_in('username', $names);
298 // Produces: WHERE username IN ('Frank', 'Todd', 'James')
299
300
James L Parry42a7df62014-11-25 12:06:49 -0800301**$this->db->or_where_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500302
303Generates a WHERE field IN ('item', 'item') SQL query joined with OR if
304appropriate
305
306::
307
308 $names = array('Frank', 'Todd', 'James');
309 $this->db->or_where_in('username', $names);
310 // Produces: OR username IN ('Frank', 'Todd', 'James')
311
James L Parry141288d2014-12-06 01:45:12 -0800312**$this->db->where_not_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500313
314Generates a WHERE field NOT IN ('item', 'item') SQL query joined with
315AND if appropriate
316
317::
318
319 $names = array('Frank', 'Todd', 'James');
320 $this->db->where_not_in('username', $names);
321 // Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')
322
323
James L Parry42a7df62014-11-25 12:06:49 -0800324**$this->db->or_where_not_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500325
326Generates a WHERE field NOT IN ('item', 'item') SQL query joined with OR
327if appropriate
328
329::
330
331 $names = array('Frank', 'Todd', 'James');
332 $this->db->or_where_not_in('username', $names);
333 // Produces: OR username NOT IN ('Frank', 'Todd', 'James')
334
James L Parry42a7df62014-11-25 12:06:49 -0800335************************
336Looking for Similar Data
337************************
Derek Jones8ede1a22011-10-05 13:34:52 -0500338
James L Parry141288d2014-12-06 01:45:12 -0800339**$this->db->like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500340
Andrey Andreev41738232012-11-30 00:13:17 +0200341This method enables you to generate **LIKE** clauses, useful for doing
Derek Jones8ede1a22011-10-05 13:34:52 -0500342searches.
343
Andrey Andreev41738232012-11-30 00:13:17 +0200344.. note:: All values passed to this method are escaped automatically.
Derek Jones8ede1a22011-10-05 13:34:52 -0500345
346#. **Simple key/value method:**
347
348 ::
349
Andrey Andreev41738232012-11-30 00:13:17 +0200350 $this->db->like('title', 'match');
351 // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500352
Andrey Andreev41738232012-11-30 00:13:17 +0200353 If you use multiple method calls they will be chained together with
Derek Jones8ede1a22011-10-05 13:34:52 -0500354 AND between them::
355
356 $this->db->like('title', 'match');
357 $this->db->like('body', 'match');
Andrey Andreev41738232012-11-30 00:13:17 +0200358 // WHERE `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match% ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500359
360 If you want to control where the wildcard (%) is placed, you can use
361 an optional third argument. Your options are 'before', 'after' and
362 'both' (which is the default).
363
364 ::
365
Andrey Andreev41738232012-11-30 00:13:17 +0200366 $this->db->like('title', 'match', 'before'); // Produces: WHERE `title` LIKE '%match' ESCAPE '!'
367 $this->db->like('title', 'match', 'after'); // Produces: WHERE `title` LIKE 'match%' ESCAPE '!'
368 $this->db->like('title', 'match', 'both'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500369
370#. **Associative array method:**
371
372 ::
373
374 $array = array('title' => $match, 'page1' => $match, 'page2' => $match);
375 $this->db->like($array);
Andrey Andreev41738232012-11-30 00:13:17 +0200376 // WHERE `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500377
378
James L Parry42a7df62014-11-25 12:06:49 -0800379**$this->db->or_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500380
Andrey Andreev41738232012-11-30 00:13:17 +0200381This method is identical to the one above, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500382instances are joined by OR::
383
384 $this->db->like('title', 'match'); $this->db->or_like('body', $match);
Andrey Andreev41738232012-11-30 00:13:17 +0200385 // WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500386
Andrey Andreev41738232012-11-30 00:13:17 +0200387.. note:: ``or_like()`` was formerly known as ``orlike()``, which has been removed.
Derek Jones8ede1a22011-10-05 13:34:52 -0500388
James L Parry42a7df62014-11-25 12:06:49 -0800389**$this->db->not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500390
Andrey Andreev41738232012-11-30 00:13:17 +0200391This method is identical to ``like()``, except that it generates
392NOT LIKE statements::
Derek Jones8ede1a22011-10-05 13:34:52 -0500393
Andrey Andreev41738232012-11-30 00:13:17 +0200394 $this->db->not_like('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500395
James L Parry42a7df62014-11-25 12:06:49 -0800396**$this->db->or_not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500397
Andrey Andreev41738232012-11-30 00:13:17 +0200398This method is identical to ``not_like()``, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500399instances are joined by OR::
400
401 $this->db->like('title', 'match');
402 $this->db->or_not_like('body', 'match');
Andrey Andreev41738232012-11-30 00:13:17 +0200403 // WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500404
James L Parry141288d2014-12-06 01:45:12 -0800405**$this->db->group_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500406
407Permits you to write the GROUP BY portion of your query::
408
409 $this->db->group_by("title"); // Produces: GROUP BY title
410
411You can also pass an array of multiple values as well::
412
413 $this->db->group_by(array("title", "date")); // Produces: GROUP BY title, date
414
415.. note:: group_by() was formerly known as groupby(), which has been
416 removed.
417
James L Parry141288d2014-12-06 01:45:12 -0800418**$this->db->distinct()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500419
420Adds the "DISTINCT" keyword to a query
421
422::
423
424 $this->db->distinct();
425 $this->db->get('table'); // Produces: SELECT DISTINCT * FROM table
426
James L Parry141288d2014-12-06 01:45:12 -0800427**$this->db->having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500428
429Permits you to write the HAVING portion of your query. There are 2
430possible syntaxes, 1 argument or 2::
431
432 $this->db->having('user_id = 45'); // Produces: HAVING user_id = 45
WanWizard7219c072011-12-28 14:09:05 +0100433 $this->db->having('user_id', 45); // Produces: HAVING user_id = 45
Derek Jones8ede1a22011-10-05 13:34:52 -0500434
435You can also pass an array of multiple values as well::
436
437 $this->db->having(array('title =' => 'My Title', 'id <' => $id));
438 // Produces: HAVING title = 'My Title', id < 45
439
440
441If you are using a database that CodeIgniter escapes queries for, you
442can prevent escaping content by passing an optional third argument, and
443setting it to FALSE.
444
445::
446
447 $this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
448 $this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45
449
450
James L Parry42a7df62014-11-25 12:06:49 -0800451**$this->db->or_having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500452
453Identical to having(), only separates multiple clauses with "OR".
454
James L Parry42a7df62014-11-25 12:06:49 -0800455****************
456Ordering results
457****************
458
James L Parry141288d2014-12-06 01:45:12 -0800459**$this->db->order_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500460
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200461Lets you set an ORDER BY clause.
462
463The first parameter contains the name of the column you would like to order by.
464
465The second parameter lets you set the direction of the result.
466Options are **ASC**, **DESC** AND **RANDOM**.
Derek Jones8ede1a22011-10-05 13:34:52 -0500467
468::
469
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200470 $this->db->order_by('title', 'DESC');
471 // Produces: ORDER BY `title` DESC
Derek Jones8ede1a22011-10-05 13:34:52 -0500472
473You can also pass your own string in the first parameter::
474
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200475 $this->db->order_by('title DESC, name ASC');
476 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500477
478Or multiple function calls can be made if you need multiple fields.
479
480::
481
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200482 $this->db->order_by('title', 'DESC');
483 $this->db->order_by('name', 'ASC');
484 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500485
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200486If you choose the **RANDOM** direction option, then the first parameters will
487be ignored, unless you specify a numeric seed value.
488
489::
490
491 $this->db->order_by('title', 'RANDOM');
492 // Produces: ORDER BY RAND()
493
494 $this->db->order_by(42, 'RANDOM');
495 // Produces: ORDER BY RAND(42)
Derek Jones8ede1a22011-10-05 13:34:52 -0500496
497.. note:: order_by() was formerly known as orderby(), which has been
498 removed.
499
Andrey Andreev0dfb62f2012-10-30 11:37:15 +0200500.. note:: Random ordering is not currently supported in Oracle and
501 will default to ASC instead.
Derek Jones8ede1a22011-10-05 13:34:52 -0500502
James L Parry42a7df62014-11-25 12:06:49 -0800503****************************
504Limiting or Counting Results
505****************************
506
James L Parry141288d2014-12-06 01:45:12 -0800507**$this->db->limit()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500508
509Lets you limit the number of rows you would like returned by the query::
510
511 $this->db->limit(10); // Produces: LIMIT 10
512
513The second parameter lets you set a result offset.
514
515::
516
517 $this->db->limit(10, 20); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
518
James L Parry141288d2014-12-06 01:45:12 -0800519**$this->db->count_all_results()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500520
521Permits you to determine the number of rows in a particular Active
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000522Record query. Queries will accept Query Builder restrictors such as
Andrey Andreevff806f92015-03-16 17:05:25 +0200523``where()``, ``or_where()``, ``like()``, ``or_like()``, etc. Example::
Derek Jones8ede1a22011-10-05 13:34:52 -0500524
525 echo $this->db->count_all_results('my_table'); // Produces an integer, like 25
526 $this->db->like('title', 'match');
527 $this->db->from('my_table');
WanWizard7219c072011-12-28 14:09:05 +0100528 echo $this->db->count_all_results(); // Produces an integer, like 17
Derek Jones8ede1a22011-10-05 13:34:52 -0500529
Andrey Andreevff806f92015-03-16 17:05:25 +0200530However, this method also resets any field values that you may have passed
531to ``select()``. If you need to keep them, you can pass ``FALSE`` as the
532second parameter::
yaoshanliang2f164052015-03-16 16:48:15 +0800533
Andrey Andreevff806f92015-03-16 17:05:25 +0200534 echo $this->db->count_all_results('my_table', FALSE);
yaoshanliang2f164052015-03-16 16:48:15 +0800535
James L Parry141288d2014-12-06 01:45:12 -0800536**$this->db->count_all()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500537
538Permits you to determine the number of rows in a particular table.
539Submit the table name in the first parameter. Example::
540
541 echo $this->db->count_all('my_table'); // Produces an integer, like 25
542
543**************
WanWizard7219c072011-12-28 14:09:05 +0100544Query grouping
545**************
546
547Query grouping allows you to create groups of WHERE clauses by enclosing them in parentheses. This will allow
Timothy Warrene464b392012-03-13 14:09:31 -0400548you to create queries with complex WHERE clauses. Nested groups are supported. Example::
WanWizard7219c072011-12-28 14:09:05 +0100549
550 $this->db->select('*')->from('my_table')
551 ->group_start()
552 ->where('a', 'a')
553 ->or_group_start()
554 ->where('b', 'b')
555 ->where('c', 'c')
556 ->group_end()
557 ->group_end()
558 ->where('d', 'd')
559 ->get();
560
561 // Generates:
562 // SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
563
564.. note:: groups need to be balanced, make sure every group_start() is matched by a group_end().
565
James L Parry42a7df62014-11-25 12:06:49 -0800566**$this->db->group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100567
568Starts a new group by adding an opening parenthesis to the WHERE clause of the query.
569
James L Parry42a7df62014-11-25 12:06:49 -0800570**$this->db->or_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100571
572Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR'.
573
James L Parry42a7df62014-11-25 12:06:49 -0800574**$this->db->not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100575
576Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'NOT'.
577
James L Parry42a7df62014-11-25 12:06:49 -0800578**$this->db->or_not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100579
580Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR NOT'.
581
James L Parry42a7df62014-11-25 12:06:49 -0800582**$this->db->group_end()**
WanWizard7219c072011-12-28 14:09:05 +0100583
584Ends the current group by adding an closing parenthesis to the WHERE clause of the query.
585
586**************
Derek Jones8ede1a22011-10-05 13:34:52 -0500587Inserting Data
588**************
589
James L Parry141288d2014-12-06 01:45:12 -0800590**$this->db->insert()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500591
592Generates an insert string based on the data you supply, and runs the
593query. You can either pass an **array** or an **object** to the
594function. Here is an example using an array::
595
596 $data = array(
597 'title' => 'My title',
598 'name' => 'My Name',
599 'date' => 'My date'
600 );
WanWizard7219c072011-12-28 14:09:05 +0100601
Derek Jones8ede1a22011-10-05 13:34:52 -0500602 $this->db->insert('mytable', $data);
603 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
604
605The first parameter will contain the table name, the second is an
606associative array of values.
607
608Here is an example using an object::
609
610 /*
611 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200612 public $title = 'My Title';
613 public $content = 'My Content';
614 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500615 }
616 */
WanWizard7219c072011-12-28 14:09:05 +0100617
Derek Jones8ede1a22011-10-05 13:34:52 -0500618 $object = new Myclass;
619 $this->db->insert('mytable', $object);
620 // Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
621
622The first parameter will contain the table name, the second is an
623object.
624
625.. note:: All values are escaped automatically producing safer queries.
626
James L Parry141288d2014-12-06 01:45:12 -0800627**$this->db->get_compiled_insert()**
James L Parry42a7df62014-11-25 12:06:49 -0800628
James L Parry141288d2014-12-06 01:45:12 -0800629Compiles the insertion query just like $this->db->insert() but does not
Kyle Farris48d8fb62011-10-14 17:59:49 -0300630*run* the query. This method simply returns the SQL query as a string.
631
632Example::
633
634 $data = array(
635 'title' => 'My title',
636 'name' => 'My Name',
637 'date' => 'My date'
638 );
WanWizard7219c072011-12-28 14:09:05 +0100639
Kyle Farris48d8fb62011-10-14 17:59:49 -0300640 $sql = $this->db->set($data)->get_compiled_insert('mytable');
641 echo $sql;
WanWizard7219c072011-12-28 14:09:05 +0100642
Kyle Farris48d8fb62011-10-14 17:59:49 -0300643 // Produces string: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
644
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000645The second parameter enables you to set whether or not the query builder query
James L Parry141288d2014-12-06 01:45:12 -0800646will be reset (by default it will be--just like $this->db->insert())::
WanWizard7219c072011-12-28 14:09:05 +0100647
Kyle Farris48d8fb62011-10-14 17:59:49 -0300648 echo $this->db->set('title', 'My Title')->get_compiled_insert('mytable', FALSE);
WanWizard7219c072011-12-28 14:09:05 +0100649
Kyle Farris48d8fb62011-10-14 17:59:49 -0300650 // Produces string: INSERT INTO mytable (title) VALUES ('My Title')
WanWizard7219c072011-12-28 14:09:05 +0100651
Kyle Farris48d8fb62011-10-14 17:59:49 -0300652 echo $this->db->set('content', 'My Content')->get_compiled_insert();
653
654 // Produces string: INSERT INTO mytable (title, content) VALUES ('My Title', 'My Content')
WanWizard7219c072011-12-28 14:09:05 +0100655
656The key thing to notice in the above example is that the second query did not
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200657utlize `$this->db->from()` nor did it pass a table name into the first
WanWizard7219c072011-12-28 14:09:05 +0100658parameter. The reason this worked is because the query has not been executed
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200659using `$this->db->insert()` which resets values or reset directly using
660`$this->db->reset_query()`.
661
662.. note:: This method doesn't work for batched inserts.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300663
James L Parry141288d2014-12-06 01:45:12 -0800664**$this->db->insert_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500665
666Generates an insert string based on the data you supply, and runs the
667query. You can either pass an **array** or an **object** to the
668function. Here is an example using an array::
669
670 $data = array(
671 array(
672 'title' => 'My title',
673 'name' => 'My Name',
674 'date' => 'My date'
675 ),
676 array(
677 'title' => 'Another title',
678 'name' => 'Another Name',
679 'date' => 'Another date'
680 )
681 );
WanWizard7219c072011-12-28 14:09:05 +0100682
Derek Jones8ede1a22011-10-05 13:34:52 -0500683 $this->db->insert_batch('mytable', $data);
684 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
685
686The first parameter will contain the table name, the second is an
687associative array of values.
688
689.. note:: All values are escaped automatically producing safer queries.
690
James L Parry42a7df62014-11-25 12:06:49 -0800691*************
692Updating Data
693*************
694
James L Parry141288d2014-12-06 01:45:12 -0800695**$this->db->replace()**
Andrey Andreev04c50f52012-10-24 23:05:25 +0300696
697This method executes a REPLACE statement, which is basically the SQL
698standard for (optional) DELETE + INSERT, using *PRIMARY* and *UNIQUE*
699keys as the determining factor.
700In our case, it will save you from the need to implement complex
701logics with different combinations of ``select()``, ``update()``,
702``delete()`` and ``insert()`` calls.
703
704Example::
705
706 $data = array(
707 'title' => 'My title',
708 'name' => 'My Name',
709 'date' => 'My date'
710 );
711
712 $this->db->replace('table', $data);
713
714 // Executes: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
715
716In the above example, if we assume that the *title* field is our primary
717key, then if a row containing 'My title' as the *title* value, that row
718will be deleted with our new row data replacing it.
719
720Usage of the ``set()`` method is also allowed and all fields are
721automatically escaped, just like with ``insert()``.
722
James L Parry141288d2014-12-06 01:45:12 -0800723**$this->db->set()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500724
725This function enables you to set values for inserts or updates.
726
727**It can be used instead of passing a data array directly to the insert
728or update functions:**
729
730::
731
732 $this->db->set('name', $name);
733 $this->db->insert('mytable'); // Produces: INSERT INTO mytable (name) VALUES ('{$name}')
734
735If you use multiple function called they will be assembled properly
736based on whether you are doing an insert or an update::
737
738 $this->db->set('name', $name);
739 $this->db->set('title', $title);
740 $this->db->set('status', $status);
WanWizard7219c072011-12-28 14:09:05 +0100741 $this->db->insert('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500742
743**set()** will also accept an optional third parameter ($escape), that
744will prevent data from being escaped if set to FALSE. To illustrate the
745difference, here is set() used both with and without the escape
746parameter.
747
748::
749
750 $this->db->set('field', 'field+1', FALSE);
751 $this->db->insert('mytable'); // gives INSERT INTO mytable (field) VALUES (field+1)
752 $this->db->set('field', 'field+1');
753 $this->db->insert('mytable'); // gives INSERT INTO mytable (field) VALUES ('field+1')
754
755
756You can also pass an associative array to this function::
757
758 $array = array(
759 'name' => $name,
760 'title' => $title,
761 'status' => $status
762 );
WanWizard7219c072011-12-28 14:09:05 +0100763
Derek Jones8ede1a22011-10-05 13:34:52 -0500764 $this->db->set($array);
765 $this->db->insert('mytable');
766
767Or an object::
768
769 /*
770 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200771 public $title = 'My Title';
772 public $content = 'My Content';
773 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500774 }
775 */
WanWizard7219c072011-12-28 14:09:05 +0100776
Derek Jones8ede1a22011-10-05 13:34:52 -0500777 $object = new Myclass;
778 $this->db->set($object);
779 $this->db->insert('mytable');
780
James L Parry141288d2014-12-06 01:45:12 -0800781**$this->db->update()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500782
783Generates an update string and runs the query based on the data you
784supply. You can pass an **array** or an **object** to the function. Here
785is an example using an array::
786
787 $data = array(
788 'title' => $title,
789 'name' => $name,
790 'date' => $date
791 );
WanWizard7219c072011-12-28 14:09:05 +0100792
Derek Jones8ede1a22011-10-05 13:34:52 -0500793 $this->db->where('id', $id);
794 $this->db->update('mytable', $data);
795 // Produces: // UPDATE mytable // SET title = '{$title}', name = '{$name}', date = '{$date}' // WHERE id = $id
796
797Or you can supply an object::
798
799 /*
800 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200801 public $title = 'My Title';
802 public $content = 'My Content';
803 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500804 }
805 */
WanWizard7219c072011-12-28 14:09:05 +0100806
Derek Jones8ede1a22011-10-05 13:34:52 -0500807 $object = new Myclass;
808 $this->db->where('id', $id);
809 $this->db->update('mytable', $object);
810 // Produces: // UPDATE mytable // SET title = '{$title}', name = '{$name}', date = '{$date}' // WHERE id = $id
811
812.. note:: All values are escaped automatically producing safer queries.
813
814You'll notice the use of the $this->db->where() function, enabling you
815to set the WHERE clause. You can optionally pass this information
816directly into the update function as a string::
817
818 $this->db->update('mytable', $data, "id = 4");
819
820Or as an array::
821
822 $this->db->update('mytable', $data, array('id' => $id));
823
824You may also use the $this->db->set() function described above when
825performing updates.
826
James L Parry141288d2014-12-06 01:45:12 -0800827**$this->db->update_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500828
829Generates an update string based on the data you supply, and runs the query.
830You can either pass an **array** or an **object** to the function.
831Here is an example using an array::
832
833 $data = array(
834 array(
835 'title' => 'My title' ,
836 'name' => 'My Name 2' ,
837 'date' => 'My date 2'
838 ),
839 array(
840 'title' => 'Another title' ,
841 'name' => 'Another Name 2' ,
842 'date' => 'Another date 2'
843 )
844 );
845
WanWizard7219c072011-12-28 14:09:05 +0100846 $this->db->update_batch('mytable', $data, 'title');
Derek Jones8ede1a22011-10-05 13:34:52 -0500847
WanWizard7219c072011-12-28 14:09:05 +0100848 // Produces:
Derek Jones8ede1a22011-10-05 13:34:52 -0500849 // UPDATE `mytable` SET `name` = CASE
850 // WHEN `title` = 'My title' THEN 'My Name 2'
851 // WHEN `title` = 'Another title' THEN 'Another Name 2'
852 // ELSE `name` END,
WanWizard7219c072011-12-28 14:09:05 +0100853 // `date` = CASE
Derek Jones8ede1a22011-10-05 13:34:52 -0500854 // WHEN `title` = 'My title' THEN 'My date 2'
855 // WHEN `title` = 'Another title' THEN 'Another date 2'
856 // ELSE `date` END
857 // WHERE `title` IN ('My title','Another title')
858
859The first parameter will contain the table name, the second is an associative
860array of values, the third parameter is the where key.
861
862.. note:: All values are escaped automatically producing safer queries.
863
Andrey Andreev9f808b02012-10-24 17:38:48 +0300864.. note:: ``affected_rows()`` won't give you proper results with this method,
865 due to the very nature of how it works. Instead, ``update_batch()``
866 returns the number of rows affected.
867
James L Parry141288d2014-12-06 01:45:12 -0800868**$this->db->get_compiled_update()**
Kyle Farris48d8fb62011-10-14 17:59:49 -0300869
870This works exactly the same way as ``$this->db->get_compiled_insert()`` except
871that it produces an UPDATE SQL string instead of an INSERT SQL string.
872
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200873For more information view documentation for `$this->db->get_compiled_insert()`.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300874
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200875.. note:: This method doesn't work for batched updates.
Derek Jones8ede1a22011-10-05 13:34:52 -0500876
877*************
878Deleting Data
879*************
880
James L Parry141288d2014-12-06 01:45:12 -0800881**$this->db->delete()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500882
883Generates a delete SQL string and runs the query.
884
885::
886
887 $this->db->delete('mytable', array('id' => $id)); // Produces: // DELETE FROM mytable // WHERE id = $id
888
889The first parameter is the table name, the second is the where clause.
890You can also use the where() or or_where() functions instead of passing
891the data to the second parameter of the function::
892
893 $this->db->where('id', $id);
894 $this->db->delete('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100895
Derek Jones8ede1a22011-10-05 13:34:52 -0500896 // Produces:
897 // DELETE FROM mytable
898 // WHERE id = $id
899
900
901An array of table names can be passed into delete() if you would like to
902delete data from more than 1 table.
903
904::
905
906 $tables = array('table1', 'table2', 'table3');
907 $this->db->where('id', '5');
908 $this->db->delete($tables);
909
910
911If you want to delete all data from a table, you can use the truncate()
912function, or empty_table().
913
James L Parry141288d2014-12-06 01:45:12 -0800914**$this->db->empty_table()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500915
916Generates a delete SQL string and runs the
917query.::
918
kenjisc35d2c92011-10-26 17:09:17 +0900919 $this->db->empty_table('mytable'); // Produces: DELETE FROM mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500920
James L Parry141288d2014-12-06 01:45:12 -0800921**$this->db->truncate()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500922
923Generates a truncate SQL string and runs the query.
924
925::
926
927 $this->db->from('mytable');
kenjisc35d2c92011-10-26 17:09:17 +0900928 $this->db->truncate();
WanWizard7219c072011-12-28 14:09:05 +0100929
930 // or
931
Derek Jones8ede1a22011-10-05 13:34:52 -0500932 $this->db->truncate('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100933
Derek Jones8ede1a22011-10-05 13:34:52 -0500934 // Produce:
WanWizard7219c072011-12-28 14:09:05 +0100935 // TRUNCATE mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500936
937.. note:: If the TRUNCATE command isn't available, truncate() will
938 execute as "DELETE FROM table".
WanWizard7219c072011-12-28 14:09:05 +0100939
James L Parry141288d2014-12-06 01:45:12 -0800940**$this->db->get_compiled_delete()**
James L Parry42a7df62014-11-25 12:06:49 -0800941
Kyle Farris48d8fb62011-10-14 17:59:49 -0300942This works exactly the same way as ``$this->db->get_compiled_insert()`` except
943that it produces a DELETE SQL string instead of an INSERT SQL string.
944
James L Parry141288d2014-12-06 01:45:12 -0800945For more information view documentation for $this->db->get_compiled_insert().
James L Parry42a7df62014-11-25 12:06:49 -0800946
Derek Jones8ede1a22011-10-05 13:34:52 -0500947***************
948Method Chaining
949***************
950
951Method chaining allows you to simplify your syntax by connecting
952multiple functions. Consider this example::
953
954 $query = $this->db->select('title')
Timothy Warrene464b392012-03-13 14:09:31 -0400955 ->where('id', $id)
956 ->limit(10, 20)
957 ->get('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500958
Derek Jones8ede1a22011-10-05 13:34:52 -0500959.. _ar-caching:
960
961*********************
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000962Query Builder Caching
Derek Jones8ede1a22011-10-05 13:34:52 -0500963*********************
964
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000965While not "true" caching, Query Builder enables you to save (or "cache")
Derek Jones8ede1a22011-10-05 13:34:52 -0500966certain parts of your queries for reuse at a later point in your
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000967script's execution. Normally, when an Query Builder call is completed,
Derek Jones8ede1a22011-10-05 13:34:52 -0500968all stored information is reset for the next call. With caching, you can
969prevent this reset, and reuse information easily.
970
971Cached calls are cumulative. If you make 2 cached select() calls, and
972then 2 uncached select() calls, this will result in 4 select() calls.
973There are three Caching functions available:
974
James L Parry42a7df62014-11-25 12:06:49 -0800975**$this->db->start_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500976
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000977This function must be called to begin caching. All Query Builder queries
Derek Jones8ede1a22011-10-05 13:34:52 -0500978of the correct type (see below for supported queries) are stored for
979later use.
980
James L Parry42a7df62014-11-25 12:06:49 -0800981**$this->db->stop_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500982
983This function can be called to stop caching.
984
James L Parry42a7df62014-11-25 12:06:49 -0800985**$this->db->flush_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500986
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000987This function deletes all items from the Query Builder cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500988
James L Parry42a7df62014-11-25 12:06:49 -0800989An example of caching
990---------------------
991
Derek Jones8ede1a22011-10-05 13:34:52 -0500992Here's a usage example::
993
994 $this->db->start_cache();
995 $this->db->select('field1');
996 $this->db->stop_cache();
997 $this->db->get('tablename');
998 //Generates: SELECT `field1` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +0100999
Derek Jones8ede1a22011-10-05 13:34:52 -05001000 $this->db->select('field2');
1001 $this->db->get('tablename');
1002 //Generates: SELECT `field1`, `field2` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +01001003
Derek Jones8ede1a22011-10-05 13:34:52 -05001004 $this->db->flush_cache();
1005 $this->db->select('field2');
1006 $this->db->get('tablename');
1007 //Generates: SELECT `field2` FROM (`tablename`)
1008
1009
1010.. note:: The following statements can be cached: select, from, join,
1011 where, like, group_by, having, order_by, set
1012
1013
James L Parry42a7df62014-11-25 12:06:49 -08001014***********************
1015Resetting Query Builder
1016***********************
1017
James L Parry141288d2014-12-06 01:45:12 -08001018**$this->db->reset_query()**
Kyle Farris48d8fb62011-10-14 17:59:49 -03001019
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001020Resetting Query Builder allows you to start fresh with your query without
WanWizard7219c072011-12-28 14:09:05 +01001021executing it first using a method like $this->db->get() or $this->db->insert().
1022Just like the methods that execute a query, this will *not* reset items you've
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001023cached using `Query Builder Caching`_.
Kyle Farris48d8fb62011-10-14 17:59:49 -03001024
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001025This is useful in situations where you are using Query Builder to generate SQL
WanWizard7219c072011-12-28 14:09:05 +01001026(ex. ``$this->db->get_compiled_select()``) but then choose to, for instance,
Kyle Farris48d8fb62011-10-14 17:59:49 -03001027run the query::
1028
1029 // Note that the second parameter of the get_compiled_select method is FALSE
1030 $sql = $this->db->select(array('field1','field2'))
1031 ->where('field3',5)
1032 ->get_compiled_select('mytable', FALSE);
1033
1034 // ...
1035 // Do something crazy with the SQL code... like add it to a cron script for
1036 // later execution or something...
1037 // ...
1038
1039 $data = $this->db->get()->result_array();
1040
1041 // Would execute and return an array of results of the following query:
Andrey Andreev896d3e32014-01-07 17:13:25 +02001042 // SELECT field1, field1 from mytable where field3 = 5;
1043
1044.. note:: Double calls to ``get_compiled_select()`` while you're using the
1045 Query Builder Caching functionality and NOT resetting your queries
1046 will results in the cache being merged twice. That in turn will
James L Parry73817112014-12-08 03:09:29 -08001047 i.e. if you're caching a ``select()`` - select the same field twice.
1048
1049***************
1050Class Reference
1051***************
1052
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001053.. php:class:: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001054
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001055 .. php:method:: reset_query()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001056
1057 :returns: CI_DB_query_builder instance (method chaining)
1058 :rtype: CI_DB_query_builder
1059
1060 Resets the current Query Builder state. Useful when you want
1061 to build a query that can be cancelled under certain conditions.
1062
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001063 .. php:method:: start_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001064
1065 :returns: CI_DB_query_builder instance (method chaining)
1066 :rtype: CI_DB_query_builder
1067
1068 Starts the Query Builder cache.
1069
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001070 .. php:method:: stop_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001071
1072 :returns: CI_DB_query_builder instance (method chaining)
1073 :rtype: CI_DB_query_builder
1074
1075 Stops the Query Builder cache.
1076
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001077 .. php:method:: flush_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001078
1079 :returns: CI_DB_query_builder instance (method chaining)
1080 :rtype: CI_DB_query_builder
1081
1082 Empties the Query Builder cache.
1083
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001084 .. php:method:: set_dbprefix([$prefix = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001085
1086 :param string $prefix: The new prefix to use
1087 :returns: The DB prefix in use
1088 :rtype: string
1089
1090 Sets the database prefix, without having to reconnect.
1091
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001092 .. php:method:: dbprefix([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001093
1094 :param string $table: The table name to prefix
1095 :returns: The prefixed table name
1096 :rtype: string
1097
1098 Prepends a database prefix, if one exists in configuration.
1099
Andrey Andreevff806f92015-03-16 17:05:25 +02001100 .. php:method:: count_all_results([$table = '', [$reset = TRUE]])
James L Parry73817112014-12-08 03:09:29 -08001101
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001102 :param string $table: Table name
Andrey Andreevff806f92015-03-16 17:05:25 +02001103 :param bool $reset: Whether to reset values for SELECTs
James L Parry73817112014-12-08 03:09:29 -08001104 :returns: Number of rows in the query result
1105 :rtype: int
1106
David Wosnitzad31a4e62014-12-12 16:35:35 +01001107 Generates a platform-specific query string that counts
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001108 all records returned by an Query Builder query.
James L Parry73817112014-12-08 03:09:29 -08001109
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001110 .. php:method:: get([$table = ''[, $limit = NULL[, $offset = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001111
1112 :param string $table: The table to query
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001113 :param int $limit: The LIMIT clause
1114 :param int $offset: The OFFSET clause
1115 :returns: CI_DB_result instance (method chaining)
1116 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001117
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001118 Compiles and runs SELECT statement based on the already
1119 called Query Builder methods.
James L Parry73817112014-12-08 03:09:29 -08001120
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001121 .. php:method:: get_where([$table = ''[, $where = NULL[, $limit = NULL[, $offset = NULL]]]])
James L Parry73817112014-12-08 03:09:29 -08001122
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001123 :param mixed $table: The table(s) to fetch data from; string or array
1124 :param string $where: The WHERE clause
1125 :param int $limit: The LIMIT clause
1126 :param int $offset: The OFFSET clause
1127 :returns: CI_DB_result instance (method chaining)
1128 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001129
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001130 Same as ``get()``, but also allows the WHERE to be added directly.
James L Parry73817112014-12-08 03:09:29 -08001131
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001132 .. php:method:: select([$select = '*'[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001133
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001134 :param string $select: The SELECT portion of a query
1135 :param bool $escape: Whether to escape values and identifiers
1136 :returns: CI_DB_query_builder instance (method chaining)
1137 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001138
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001139 Adds a SELECT clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001140
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001141 .. php:method:: select_avg([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001142
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001143 :param string $select: Field to compute the average of
1144 :param string $alias: Alias for the resulting value name
1145 :returns: CI_DB_query_builder instance (method chaining)
1146 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001147
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001148 Adds a SELECT AVG(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001149
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001150 .. php:method:: select_max([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001151
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001152 :param string $select: Field to compute the maximum of
1153 :param string $alias: Alias for the resulting value name
1154 :returns: CI_DB_query_builder instance (method chaining)
1155 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001156
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001157 Adds a SELECT MAX(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001158
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001159 .. php:method:: select_min([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001160
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001161 :param string $select: Field to compute the minimum of
1162 :param string $alias: Alias for the resulting value name
1163 :returns: CI_DB_query_builder instance (method chaining)
1164 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001165
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001166 Adds a SELECT MIN(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001167
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001168 .. php:method:: select_sum([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001169
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001170 :param string $select: Field to compute the sum of
1171 :param string $alias: Alias for the resulting value name
1172 :returns: CI_DB_query_builder instance (method chaining)
1173 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001174
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001175 Adds a SELECT SUM(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001176
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001177 .. php:method:: distinct([$val = TRUE])
James L Parry73817112014-12-08 03:09:29 -08001178
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001179 :param bool $val: Desired value of the "distinct" flag
1180 :returns: CI_DB_query_builder instance (method chaining)
1181 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001182
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001183 Sets a flag which tells the query builder to add
1184 a DISTINCT clause to the SELECT portion of the query.
1185
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001186 .. php:method:: from($from)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001187
1188 :param mixed $from: Table name(s); string or array
1189 :returns: CI_DB_query_builder instance (method chaining)
1190 :rtype: CI_DB_query_builder
1191
1192 Specifies the FROM clause of a query.
James L Parry73817112014-12-08 03:09:29 -08001193
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001194 .. php:method:: join($table, $cond[, $type = ''[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001195
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001196 :param string $table: Table name to join
1197 :param string $cond: The JOIN ON condition
James L Parry73817112014-12-08 03:09:29 -08001198 :param string $type: The JOIN type
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001199 :param bool $escape: Whether to escape values and identifiers
1200 :returns: CI_DB_query_builder instance (method chaining)
1201 :rtype: CI_DB_query_builder
1202
1203 Adds a JOIN clause to a query.
1204
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001205 .. php:method:: where($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001206
1207 :param mixed $key: Name of field to compare, or associative array
1208 :param mixed $value: If a single key, compared to this value
James L Parry73817112014-12-08 03:09:29 -08001209 :param boolean $escape: Whether to escape values and identifiers
1210 :returns: DB_query_builder instance
1211 :rtype: object
1212
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001213 Generates the WHERE portion of the query.
James L Parry73817112014-12-08 03:09:29 -08001214 Separates multiple calls with 'AND'.
1215
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001216 .. php:method:: or_where($key[, $value = NULL[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001217
1218 :param mixed $key: Name of field to compare, or associative array
1219 :param mixed $value: If a single key, compared to this value
1220 :param boolean $escape: Whether to escape values and identifiers
1221 :returns: DB_query_builder instance
1222 :rtype: object
1223
1224 Generates the WHERE portion of the query.
1225 Separates multiple calls with 'OR'.
1226
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001227 .. php:method:: or_where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001228
1229 :param string $key: The field to search
1230 :param array $values: The values searched on
Andrey Andreevc749bfb2015-02-20 15:14:14 +02001231 :param boolean $escape: Whether to escape identifiers
James L Parry73817112014-12-08 03:09:29 -08001232 :returns: DB_query_builder instance
1233 :rtype: object
1234
1235 Generates a WHERE field IN('item', 'item') SQL query,
1236 joined with 'OR' if appropriate.
1237
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001238 .. php:method:: or_where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001239
1240 :param string $key: The field to search
1241 :param array $values: The values searched on
Andrey Andreevc749bfb2015-02-20 15:14:14 +02001242 :param boolean $escape: Whether to escape identifiers
James L Parry73817112014-12-08 03:09:29 -08001243 :returns: DB_query_builder instance
1244 :rtype: object
1245
1246 Generates a WHERE field NOT IN('item', 'item') SQL query,
1247 joined with 'OR' if appropriate.
1248
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001249 .. php:method:: where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001250
1251 :param string $key: Name of field to examine
1252 :param array $values: Array of target values
Andrey Andreevc749bfb2015-02-20 15:14:14 +02001253 :param boolean $escape: Whether to escape identifiers
James L Parry73817112014-12-08 03:09:29 -08001254 :returns: DB_query_builder instance
1255 :rtype: object
1256
1257 Generates a WHERE field IN('item', 'item') SQL query,
1258 joined with 'AND' if appropriate.
1259
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001260 .. php:method:: where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001261
1262 :param string $key: Name of field to examine
1263 :param array $values: Array of target values
Andrey Andreevc749bfb2015-02-20 15:14:14 +02001264 :param boolean $escape: Whether to escape identifiers
James L Parry73817112014-12-08 03:09:29 -08001265 :returns: DB_query_builder instance
1266 :rtype: object
1267
1268 Generates a WHERE field NOT IN('item', 'item') SQL query,
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001269 joined with 'AND' if appropriate.
1270
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001271 .. php:method:: group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001272
1273 :returns: CI_DB_query_builder instance (method chaining)
1274 :rtype: CI_DB_query_builder
1275
1276 Starts a group expression, using ANDs for the conditions inside it.
1277
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001278 .. php:method:: or_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001279
1280 :returns: CI_DB_query_builder instance (method chaining)
1281 :rtype: CI_DB_query_builder
1282
1283 Starts a group expression, using ORs for the conditions inside it.
1284
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001285 .. php:method:: not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001286
1287 :returns: CI_DB_query_builder instance (method chaining)
1288 :rtype: CI_DB_query_builder
1289
1290 Starts a group expression, using AND NOTs for the conditions inside it.
1291
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001292 .. php:method:: or_not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001293
1294 :returns: CI_DB_query_builder instance (method chaining)
1295 :rtype: CI_DB_query_builder
1296
1297 Starts a group expression, using OR NOTs for the conditions inside it.
1298
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001299 .. php:method:: group_end()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001300
1301 :returns: DB_query_builder instance
1302 :rtype: object
1303
1304 Ends a group expression.
1305
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001306 .. php:method:: like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001307
1308 :param string $field: Field name
1309 :param string $match: Text portion to match
1310 :param string $side: Which side of the expression to put the '%' wildcard on
1311 :param bool $escape: Whether to escape values and identifiers
1312 :returns: CI_DB_query_builder instance (method chaining)
1313 :rtype: CI_DB_query_builder
1314
1315 Adds a LIKE clause to a query, separating multiple calls with AND.
1316
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001317 .. php:method:: or_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001318
1319 :param string $field: Field name
1320 :param string $match: Text portion to match
1321 :param string $side: Which side of the expression to put the '%' wildcard on
1322 :param bool $escape: Whether to escape values and identifiers
1323 :returns: CI_DB_query_builder instance (method chaining)
1324 :rtype: CI_DB_query_builder
1325
1326 Adds a LIKE clause to a query, separating multiple class with OR.
1327
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001328 .. php:method:: not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001329
1330 :param string $field: Field name
1331 :param string $match: Text portion to match
1332 :param string $side: Which side of the expression to put the '%' wildcard on
1333 :param bool $escape: Whether to escape values and identifiers
1334 :returns: CI_DB_query_builder instance (method chaining)
1335 :rtype: CI_DB_query_builder
1336
1337 Adds a NOT LIKE clause to a query, separating multiple calls with AND.
1338
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001339 .. php:method:: or_not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001340
1341 :param string $field: Field name
1342 :param string $match: Text portion to match
1343 :param string $side: Which side of the expression to put the '%' wildcard on
1344 :param bool $escape: Whether to escape values and identifiers
1345 :returns: CI_DB_query_builder instance (method chaining)
1346 :rtype: CI_DB_query_builder
1347
1348 Adds a NOT LIKE clause to a query, separating multiple calls with OR.
1349
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001350 .. php:method:: having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001351
1352 :param mixed $key: Identifier (string) or associative array of field/value pairs
1353 :param string $value: Value sought if $key is an identifier
1354 :param string $escape: Whether to escape values and identifiers
1355 :returns: CI_DB_query_builder instance (method chaining)
1356 :rtype: CI_DB_query_builder
1357
1358 Adds a HAVING clause to a query, separating multiple calls with AND.
1359
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001360 .. php:method:: or_having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001361
1362 :param mixed $key: Identifier (string) or associative array of field/value pairs
1363 :param string $value: Value sought if $key is an identifier
1364 :param string $escape: Whether to escape values and identifiers
1365 :returns: CI_DB_query_builder instance (method chaining)
1366 :rtype: CI_DB_query_builder
1367
1368 Adds a HAVING clause to a query, separating multiple calls with OR.
1369
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001370 .. php:method:: group_by($by[, $escape = NULL])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001371
1372 :param mixed $by: Field(s) to group by; string or array
1373 :returns: CI_DB_query_builder instance (method chaining)
1374 :rtype: CI_DB_query_builder
1375
1376 Adds a GROUP BY clause to a query.
1377
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001378 .. php:method:: order_by($orderby[, $direction = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001379
1380 :param string $orderby: Field to order by
1381 :param string $direction: The order requested - ASC, DESC or random
1382 :param bool $escape: Whether to escape values and identifiers
1383 :returns: CI_DB_query_builder instance (method chaining)
1384 :rtype: CI_DB_query_builder
1385
1386 Adds an ORDER BY clause to a query.
1387
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001388 .. php:method:: limit($value[, $offset = 0])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001389
1390 :param int $value: Number of rows to limit the results to
1391 :param int $offset: Number of rows to skip
1392 :returns: CI_DB_query_builder instance (method chaining)
1393 :rtype: CI_DB_query_builder
1394
1395 Adds LIMIT and OFFSET clauses to a query.
1396
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001397 .. php:method:: offset($offset)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001398
1399 :param int $offset: Number of rows to skip
1400 :returns: CI_DB_query_builder instance (method chaining)
1401 :rtype: CI_DB_query_builder
1402
1403 Adds an OFFSET clause to a query.
1404
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001405 .. php:method:: set($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001406
1407 :param mixed $key: Field name, or an array of field/value pairs
1408 :param string $value: Field value, if $key is a single field
1409 :param bool $escape: Whether to escape values and identifiers
1410 :returns: CI_DB_query_builder instance (method chaining)
1411 :rtype: CI_DB_query_builder
1412
1413 Adds field/value pairs to be passed later to ``insert()``,
1414 ``update()`` or ``replace()``.
1415
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001416 .. php:method:: insert([$table = ''[, $set = NULL[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001417
1418 :param string $table: Table name
1419 :param array $set: An associative array of field/value pairs
1420 :param bool $escape: Whether to escape values and identifiers
1421 :returns: TRUE on success, FALSE on failure
1422 :rtype: bool
1423
1424 Compiles and executes an INSERT statement.
1425
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001426 .. php:method:: insert_batch([$table = ''[, $set = NULL[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001427
1428 :param string $table: Table name
1429 :param array $set: Data to insert
1430 :param bool $escape: Whether to escape values and identifiers
1431 :returns: Number of rows inserted or FALSE on failure
1432 :rtype: mixed
1433
1434 Compiles and executes batch INSERT statements.
1435
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001436 .. php:method:: set_insert_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001437
1438 :param mixed $key: Field name or an array of field/value pairs
1439 :param string $value: Field value, if $key is a single field
1440 :param bool $escape: Whether to escape values and identifiers
1441 :returns: CI_DB_query_builder instance (method chaining)
1442 :rtype: CI_DB_query_builder
1443
1444 Adds field/value pairs to be inserted in a table later via ``insert_batch()``.
1445
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001446 .. php:method:: update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001447
1448 :param string $table: Table name
1449 :param array $set: An associative array of field/value pairs
1450 :param string $where: The WHERE clause
1451 :param int $limit: The LIMIT clause
1452 :returns: TRUE on success, FALSE on failure
1453 :rtype: bool
1454
1455 Compiles and executes an UPDATE statement.
1456
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001457 .. php:method:: update_batch([$table = ''[, $set = NULL[, $value = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001458
1459 :param string $table: Table name
1460 :param array $set: Field name, or an associative array of field/value pairs
1461 :param string $value: Field value, if $set is a single field
1462 :returns: Number of rows updated or FALSE on failure
1463 :rtype: mixed
1464
1465 Compiles and executes batch UPDATE statements.
1466
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001467 .. php:method:: set_update_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001468
1469 :param mixed $key: Field name or an array of field/value pairs
1470 :param string $value: Field value, if $key is a single field
1471 :param bool $escape: Whether to escape values and identifiers
1472 :returns: CI_DB_query_builder instance (method chaining)
1473 :rtype: CI_DB_query_builder
1474
1475 Adds field/value pairs to be updated in a table later via ``update_batch()``.
1476
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001477 .. php:method:: replace([$table = ''[, $set = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001478
1479 :param string $table: Table name
1480 :param array $set: An associative array of field/value pairs
1481 :returns: TRUE on success, FALSE on failure
1482 :rtype: bool
1483
1484 Compiles and executes a REPLACE statement.
1485
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001486 .. php:method:: delete([$table = ''[, $where = ''[, $limit = NULL[, $reset_data = TRUE]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001487
1488 :param mixed $table: The table(s) to delete from; string or array
1489 :param string $where: The WHERE clause
1490 :param int $limit: The LIMIT clause
1491 :param bool $reset_data: TRUE to reset the query "write" clause
1492 :returns: CI_DB_query_builder instance (method chaining) or FALSE on failure
1493 :rtype: mixed
1494
1495 Compiles and executes a DELETE query.
1496
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001497 .. php:method:: truncate([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001498
1499 :param string $table: Table name
1500 :returns: TRUE on success, FALSE on failure
1501 :rtype: bool
1502
1503 Executes a TRUNCATE statement on a table.
1504
1505 .. note:: If the database platform in use doesn't support TRUNCATE,
1506 a DELETE statement will be used instead.
1507
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001508 .. php:method:: empty_table([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001509
1510 :param string $table: Table name
1511 :returns: TRUE on success, FALSE on failure
1512 :rtype: bool
1513
1514 Deletes all records from a table via a DELETE statement.
1515
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001516 .. php:method:: get_compiled_select([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001517
1518 :param string $table: Table name
1519 :param bool $reset: Whether to reset the current QB values or not
1520 :returns: The compiled SQL statement as a string
1521 :rtype: string
1522
1523 Compiles a SELECT statement and returns it as a string.
1524
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001525 .. php:method:: get_compiled_insert([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001526
1527 :param string $table: Table name
1528 :param bool $reset: Whether to reset the current QB values or not
1529 :returns: The compiled SQL statement as a string
1530 :rtype: string
1531
1532 Compiles an INSERT statement and returns it as a string.
1533
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001534 .. php:method:: get_compiled_update([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001535
1536 :param string $table: Table name
1537 :param bool $reset: Whether to reset the current QB values or not
1538 :returns: The compiled SQL statement as a string
1539 :rtype: string
1540
1541 Compiles an UPDATE statement and returns it as a string.
1542
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001543 .. php:method:: get_compiled_delete([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001544
1545 :param string $table: Table name
1546 :param bool $reset: Whether to reset the current QB values or not
1547 :returns: The compiled SQL statement as a string
1548 :rtype: string
1549
David Wosnitzad31a4e62014-12-12 16:35:35 +01001550 Compiles a DELETE statement and returns it as a string.