Работа с БД: получение результатов запроса
- Автор mityok on августа 23rd, 2008
Существует несколько способов получения результатов запроса:
result()
Функция возвращает результат запроса как массив объектов либо пустой массив в случае неудачи. Обычно данная функция используется вместе с циклом foreach :
$query = $this->db->query("YOUR QUERY"); foreach ($query->result() as $row) { }
Данная функция является псевдонимом для функции result_object().
Если вы предполагаете, что в после обработки запроса результат может быть пустым, рекомендуется выполнить проверку:
$query = $this->db->query("YOUR QUERY"); if ($query->num_rows() > 0) { foreach ($query->result() as $row) { } }
result_array()
Данная функция возвращает результат обработки запроса как многомерный массив, либо пустой массив если результат отсутствует. Обычно используется в цикле foreach :
$query = $this->db->query("YOUR QUERY"); foreach ($query->result_array() as $row) { }
row()
Данная функция возвращает одну строку результата запроса. Если результат содержит более одной строки, то будет возвращена только первая строка. Функция возвращает объект. Пример использования функции:
$query = $this->db->query("YOUR QUERY"); if ($query->num_rows() > 0) { $row = $query->row(); }
Если вам нужно получить строку с определенным номером, вы можете передать номер строки в качестве первого аргумента функции:
$row = $query->row(5);
row_array()
Данная функция полностью аналогична функции row() за исключением того, что она возвращает массив. Пример:
$query = $this->db->query("YOUR QUERY"); if ($query->num_rows() > 0) { $row = $query->row_array(); }
Для получения строки с заданным номером нужно передать номер строки в качестве первого аргумента функции:
$row = $query->row_array(5);
Кроме того, вы можете построчно обрабатывать результат запроса используя следующие функции:
$row = $query->first_row() $row = $query->last_row() $row = $query->next_row() $row = $query->previous_row()
По умолчанию данные функции возвращают объект. Если вам необходимо получить строку результата как массив, передайте "array" в качестве первого параметра:
$row = $query->first_row('array') $row = $query->last_row('array') $row = $query->next_row('array') $row = $query->previous_row('array')
Вспомогательные функции
$query->num_rows()
Функция возвращает количество строк в результате обработки запроса. Примечание: в приведенном примере $query - переменная которой присвоен объект результата обработки запроса:
$query = $this->db->query('SELECT * FROM my_table');
$query->num_fields()
Функция возвращает количество ПОЛЕЙ (столбцов) в результате обработки запроса. Убедитесь, что вы вызываете функцию используя объект результата запроса:
$query = $this->db->query('SELECT * FROM my_table');
$query->free_result()
Функция высвобождает память зарезервированную для хранения данных результата запроса и удаляет идентификатор ресурса результата запроса. Обычно PHP высвобождает память автоматически в конце выполнения скрипта. Но если вы в каком-либо скрипте выполняете много запросов, то вам может понадобиться высвобождать память после обработки каждого из них чтобы снизить потребление памяти. Пример:
$query = $this->db->query('SELECT title FROM my_table'); foreach ($query->result() as $row) { } $query->free_result(); // The $query result object will no longer be available $query2 = $this->db->query('SELECT name FROM some_table'); $row = $query2->row(); $query2->free_result(); // The $query2 result object will no longer be available

Нужно
Нужно постольку-постольку, т.к. PHP в любом случае высвобождает память только в конце выполнения скрипта. Если действительно важен объем используемой памяти,то лучше не пользоваться функциями result() и result_array(), а читать результат построчно.
интересно,
интересно, насколько эффективно $query->free_result();
действительно так нужно освобождать память? сколько запросы занимают памяти?
Отправить комментарий