CodeIgniter, руководство пользователя к версии 1.6.1


Получение результатов запроса

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

result()

Эта функция возвращает результаты запроса в виде массива объектов, или пустой массив в случае неудачи. Лучше всего такой результат обрабатывается перебором массива с помощью foreach:

$query = $this->db->query("Ваш запрос");

foreach ($query->result() as $row)
{
   echo $row->title;
   echo $row->name;
   echo $row->body;
}

Упомянутая function является псевдонимом result_object().

Если выполняется запрос, у которого возможен пустой результат, то узнать количество полученых записей можно так:

$query = $this->db->query("Ваш запрос");

if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->title;
      echo $row->name;
      echo $row->body;
   }
}

result_array()

Эта функция возвращает результат запроса, но только в виде массива (если результатов нет, то массив пустой). Удобно использовать foreach для перебора результатов:

$query = $this->db->query("Ваш запрос");

foreach ($query->result_array() as $row)
{
   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

row()

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

$query = $this->db->query("Ваш запрос");

if ($query->num_rows() > 0)
{
   $row = $query->row();

   echo $row->title;
   echo $row->name;
   echo $row->body;
}

Если вам нужна какая-то конкретная строка, вы можете указать её номер в качестве первого параметра:

$row = $query->row(5);

row_array()

Так же как и row(), данная функция возвращает одну строку результата, но только в виде массива. Пример:

$query = $this->db->query("Ваш запрос");

if ($query->num_rows() > 0)
{
   $row = $query->row_array();

   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

Если вам нужна какая-то конкретная строка, вы также можете указать её номер в качестве первого параметра:

$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');

echo $query->num_rows();

$query->num_fields()

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

$query = $this->db->query('SELECT * FROM my_table');

echo $query->num_fields();

$query->free_result()

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

$query = $this->db->query('SELECT title FROM my_table');

foreach ($query->result() as $row)
{
   echo $row->title;
}
$query->free_result(); // Объект $query более не будет доступен для работы с результатами выборки

$query2 = $this->db->query('SELECT name FROM some_table');

$row = $query2->row();
echo $row->name;
$query2->free_result(); // Объект $query2 более не будет доступен для работы с результатами выборки