Работа с БД: получение результатов запроса

 

Существует несколько способов получения результатов запроса:

result()

Функция возвращает результат запроса как массив объектов либо пустой массив в случае неудачи. Обычно данная функция используется вместе с циклом foreach :

  1. $query = $this->db->query("YOUR QUERY");
  2.  
  3. foreach ($query->result() as $row)
  4. {
  5. echo $row->title;
  6. echo $row->name;
  7. echo $row->body;
  8. }

Данная функция является псевдонимом для функции result_object().
Если вы предполагаете, что в после обработки запроса результат может быть пустым, рекомендуется выполнить проверку:
  1. $query = $this->db->query("YOUR QUERY");
  2.  
  3. if ($query->num_rows() > 0)
  4. {
  5. foreach ($query->result() as $row)
  6. {
  7. echo $row->title;
  8. echo $row->name;
  9. echo $row->body;
  10. }
  11. }

result_array()

Данная функция возвращает результат обработки запроса как многомерный массив, либо пустой массив если результат отсутствует. Обычно используется в цикле foreach :

  1. $query = $this->db->query("YOUR QUERY");
  2.  
  3. foreach ($query->result_array() as $row)
  4. {
  5. echo $row['title'];
  6. echo $row['name'];
  7. echo $row['body'];
  8. }

row()

Данная функция возвращает одну строку результата запроса. Если результат содержит более одной строки, то будет возвращена только первая строка. Функция возвращает объект. Пример использования функции:

  1. $query = $this->db->query("YOUR QUERY");
  2.  
  3. if ($query->num_rows() > 0)
  4. {
  5. $row = $query->row();
  6.  
  7. echo $row->title;
  8. echo $row->name;
  9. echo $row->body;
  10. }

Если вам нужно получить строку с определенным номером, вы можете передать номер строки в качестве первого аргумента функции:
  1. $row = $query->row(5);

row_array()

Данная функция полностью аналогична функции row() за исключением того, что она возвращает массив. Пример:

  1. $query = $this->db->query("YOUR QUERY");
  2.  
  3. if ($query->num_rows() > 0)
  4. {
  5. $row = $query->row_array();
  6.  
  7. echo $row['title'];
  8. echo $row['name'];
  9. echo $row['body'];
  10. }

Для получения строки с заданным номером нужно передать номер строки в качестве первого аргумента функции:
  1. $row = $query->row_array(5);

Кроме того, вы можете построчно обрабатывать результат запроса используя следующие функции:

  1. $row = $query->first_row()
  2. $row = $query->last_row()
  3. $row = $query->next_row()
  4. $row = $query->previous_row()

По умолчанию данные функции возвращают объект. Если вам необходимо получить строку результата как массив, передайте "array" в качестве первого параметра:
  1. $row = $query->first_row('array')
  2. $row = $query->last_row('array')
  3. $row = $query->next_row('array')
  4. $row = $query->previous_row('array')

Вспомогательные функции

$query->num_rows()

Функция возвращает количество строк в результате обработки запроса. Примечание: в приведенном примере $query - переменная которой присвоен объект результата обработки запроса:

  1. $query = $this->db->query('SELECT * FROM my_table');
  2.  
  3. echo $query->num_rows();

$query->num_fields()

Функция возвращает количество ПОЛЕЙ (столбцов) в результате обработки запроса. Убедитесь, что вы вызываете функцию используя объект результата запроса:

  1. $query = $this->db->query('SELECT * FROM my_table');
  2.  
  3. echo $query->num_fields();

$query->free_result()

Функция высвобождает память зарезервированную для хранения данных результата запроса и удаляет идентификатор ресурса результата запроса. Обычно PHP высвобождает память автоматически в конце выполнения скрипта. Но если вы в каком-либо скрипте выполняете много запросов, то вам может понадобиться высвобождать память после обработки каждого из них чтобы снизить потребление памяти. Пример:

  1. $query = $this->db->query('SELECT title FROM my_table');
  2.  
  3. foreach ($query->result() as $row)
  4. {
  5. echo $row->title;
  6. }
  7. $query->free_result(); // The $query result object will no longer be available
  8.  
  9. $query2 = $this->db->query('SELECT name FROM some_table');
  10.  
  11. $row = $query2->row();
  12. echo $row->name;
  13. $query2->free_result(); // The $query2 result object will no longer be available

Ребята

Ребята подскажите почему может не работает сигменатура ?
Делаю все как в видео разработчика CodeIgniter а не работает !!!
$this->db->where('entry_id', $this->uri->segment(3));

Нужно

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

интересно,

интересно, насколько эффективно $query->free_result();
действительно так нужно освобождать память? сколько запросы занимают памяти?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
2 + 16 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

Вход в систему

Последние комментарии