]> jfr.im git - z_archive/KronOS.git/blob - system/database/DB_result.php
Fixed account.php (this ain't python bro); fixed permissions because I'm picky.
[z_archive/KronOS.git] / system / database / DB_result.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 * Database Result Class
20 *
21 * This is the platform-independent result class.
22 * This class will not be called directly. Rather, the adapter
23 * class for the specific database will extend and instantiate it.
24 *
25 * @category Database
26 * @author ExpressionEngine Dev Team
27 * @link http://codeigniter.com/user_guide/database/
28 */
29 class CI_DB_result {
30
31 var $conn_id = NULL;
32 var $result_id = NULL;
33 var $result_array = array();
34 var $result_object = array();
35 var $custom_result_object = array();
36 var $current_row = 0;
37 var $num_rows = 0;
38 var $row_data = NULL;
39
40
41 /**
42 * Query result. Acts as a wrapper function for the following functions.
43 *
44 * @access public
45 * @param string can be "object" or "array"
46 * @return mixed either a result object or array
47 */
48 public function result($type = 'object')
49 {
50 if ($type == 'array') return $this->result_array();
51 else if ($type == 'object') return $this->result_object();
52 else return $this->custom_result_object($type);
53 }
54
55 // --------------------------------------------------------------------
56
57 /**
58 * Custom query result.
59 *
60 * @param class_name A string that represents the type of object you want back
61 * @return array of objects
62 */
63 public function custom_result_object($class_name)
64 {
65 if (array_key_exists($class_name, $this->custom_result_object))
66 {
67 return $this->custom_result_object[$class_name];
68 }
69
70 if ($this->result_id === FALSE OR $this->num_rows() == 0)
71 {
72 return array();
73 }
74
75 // add the data to the object
76 $this->_data_seek(0);
77 $result_object = array();
78
79 while ($row = $this->_fetch_object())
80 {
81 $object = new $class_name();
82
83 foreach ($row as $key => $value)
84 {
85 $object->$key = $value;
86 }
87
88 $result_object[] = $object;
89 }
90
91 // return the array
92 return $this->custom_result_object[$class_name] = $result_object;
93 }
94
95 // --------------------------------------------------------------------
96
97 /**
98 * Query result. "object" version.
99 *
100 * @access public
101 * @return object
102 */
103 public function result_object()
104 {
105 if (count($this->result_object) > 0)
106 {
107 return $this->result_object;
108 }
109
110 // In the event that query caching is on the result_id variable
111 // will return FALSE since there isn't a valid SQL resource so
112 // we'll simply return an empty array.
113 if ($this->result_id === FALSE OR $this->num_rows() == 0)
114 {
115 return array();
116 }
117
118 $this->_data_seek(0);
119 while ($row = $this->_fetch_object())
120 {
121 $this->result_object[] = $row;
122 }
123
124 return $this->result_object;
125 }
126
127 // --------------------------------------------------------------------
128
129 /**
130 * Query result. "array" version.
131 *
132 * @access public
133 * @return array
134 */
135 public function result_array()
136 {
137 if (count($this->result_array) > 0)
138 {
139 return $this->result_array;
140 }
141
142 // In the event that query caching is on the result_id variable
143 // will return FALSE since there isn't a valid SQL resource so
144 // we'll simply return an empty array.
145 if ($this->result_id === FALSE OR $this->num_rows() == 0)
146 {
147 return array();
148 }
149
150 $this->_data_seek(0);
151 while ($row = $this->_fetch_assoc())
152 {
153 $this->result_array[] = $row;
154 }
155
156 return $this->result_array;
157 }
158
159 // --------------------------------------------------------------------
160
161 /**
162 * Query result. Acts as a wrapper function for the following functions.
163 *
164 * @access public
165 * @param string
166 * @param string can be "object" or "array"
167 * @return mixed either a result object or array
168 */
169 public function row($n = 0, $type = 'object')
170 {
171 if ( ! is_numeric($n))
172 {
173 // We cache the row data for subsequent uses
174 if ( ! is_array($this->row_data))
175 {
176 $this->row_data = $this->row_array(0);
177 }
178
179 // array_key_exists() instead of isset() to allow for MySQL NULL values
180 if (array_key_exists($n, $this->row_data))
181 {
182 return $this->row_data[$n];
183 }
184 // reset the $n variable if the result was not achieved
185 $n = 0;
186 }
187
188 if ($type == 'object') return $this->row_object($n);
189 else if ($type == 'array') return $this->row_array($n);
190 else return $this->custom_row_object($n, $type);
191 }
192
193 // --------------------------------------------------------------------
194
195 /**
196 * Assigns an item into a particular column slot
197 *
198 * @access public
199 * @return object
200 */
201 public function set_row($key, $value = NULL)
202 {
203 // We cache the row data for subsequent uses
204 if ( ! is_array($this->row_data))
205 {
206 $this->row_data = $this->row_array(0);
207 }
208
209 if (is_array($key))
210 {
211 foreach ($key as $k => $v)
212 {
213 $this->row_data[$k] = $v;
214 }
215
216 return;
217 }
218
219 if ($key != '' AND ! is_null($value))
220 {
221 $this->row_data[$key] = $value;
222 }
223 }
224
225 // --------------------------------------------------------------------
226
227 /**
228 * Returns a single result row - custom object version
229 *
230 * @access public
231 * @return object
232 */
233 public function custom_row_object($n, $type)
234 {
235 $result = $this->custom_result_object($type);
236
237 if (count($result) == 0)
238 {
239 return $result;
240 }
241
242 if ($n != $this->current_row AND isset($result[$n]))
243 {
244 $this->current_row = $n;
245 }
246
247 return $result[$this->current_row];
248 }
249
250 /**
251 * Returns a single result row - object version
252 *
253 * @access public
254 * @return object
255 */
256 public function row_object($n = 0)
257 {
258 $result = $this->result_object();
259
260 if (count($result) == 0)
261 {
262 return $result;
263 }
264
265 if ($n != $this->current_row AND isset($result[$n]))
266 {
267 $this->current_row = $n;
268 }
269
270 return $result[$this->current_row];
271 }
272
273 // --------------------------------------------------------------------
274
275 /**
276 * Returns a single result row - array version
277 *
278 * @access public
279 * @return array
280 */
281 public function row_array($n = 0)
282 {
283 $result = $this->result_array();
284
285 if (count($result) == 0)
286 {
287 return $result;
288 }
289
290 if ($n != $this->current_row AND isset($result[$n]))
291 {
292 $this->current_row = $n;
293 }
294
295 return $result[$this->current_row];
296 }
297
298
299 // --------------------------------------------------------------------
300
301 /**
302 * Returns the "first" row
303 *
304 * @access public
305 * @return object
306 */
307 public function first_row($type = 'object')
308 {
309 $result = $this->result($type);
310
311 if (count($result) == 0)
312 {
313 return $result;
314 }
315 return $result[0];
316 }
317
318 // --------------------------------------------------------------------
319
320 /**
321 * Returns the "last" row
322 *
323 * @access public
324 * @return object
325 */
326 public function last_row($type = 'object')
327 {
328 $result = $this->result($type);
329
330 if (count($result) == 0)
331 {
332 return $result;
333 }
334 return $result[count($result) -1];
335 }
336
337 // --------------------------------------------------------------------
338
339 /**
340 * Returns the "next" row
341 *
342 * @access public
343 * @return object
344 */
345 public function next_row($type = 'object')
346 {
347 $result = $this->result($type);
348
349 if (count($result) == 0)
350 {
351 return $result;
352 }
353
354 if (isset($result[$this->current_row + 1]))
355 {
356 ++$this->current_row;
357 }
358
359 return $result[$this->current_row];
360 }
361
362 // --------------------------------------------------------------------
363
364 /**
365 * Returns the "previous" row
366 *
367 * @access public
368 * @return object
369 */
370 public function previous_row($type = 'object')
371 {
372 $result = $this->result($type);
373
374 if (count($result) == 0)
375 {
376 return $result;
377 }
378
379 if (isset($result[$this->current_row - 1]))
380 {
381 --$this->current_row;
382 }
383 return $result[$this->current_row];
384 }
385
386 // --------------------------------------------------------------------
387
388 /**
389 * The following functions are normally overloaded by the identically named
390 * methods in the platform-specific driver -- except when query caching
391 * is used. When caching is enabled we do not load the other driver.
392 * These functions are primarily here to prevent undefined function errors
393 * when a cached result object is in use. They are not otherwise fully
394 * operational due to the unavailability of the database resource IDs with
395 * cached results.
396 */
397 public function num_rows() { return $this->num_rows; }
398 public function num_fields() { return 0; }
399 public function list_fields() { return array(); }
400 public function field_data() { return array(); }
401 public function free_result() { return TRUE; }
402 protected function _data_seek() { return TRUE; }
403 protected function _fetch_assoc() { return array(); }
404 protected function _fetch_object() { return array(); }
405
406 }
407 // END DB_result class
408
409 /* End of file DB_result.php */
410 /* Location: ./system/database/DB_result.php */