Генерация результатов запросов
Вот несколько путей для генерации результатов запросов:
result()
Эта функция возвращает результат запроса в виде массива объектов, или пустой массив в случае неудачи. Обычно вы будете использовать цикл foreach, к примеру так:
$query = $this->db->query("YOUR QUERY");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
Выше result() это алиас result_object().
Если вы выполняете запросы, которые могут не производить результата, вы должны протестировать его:
$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
}
Вы также можете передать строку в result(), которая представляет собой класс для создания экземпляров для каждого объекта результата (примечание: класс должен быть загружен)
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $row)
{
echo $row->name; // аттрибуты вызова
echo $row->reverse_name(); // или методы, определенные классом 'User'
}
result_array()
Эта функция возвращает результат запроса как обычный массив, или пустой массив, если результата нет. Обычно вы будете использовать ее в цикле foreach(), например так:
$query = $this->db->query("YOUR QUERY");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
row()
Эта функция возвращает единственную строку результата. Если ваш результат вашего запроса состоит более, чем из одной строки, она вернет первую. Результат возвращается как объект. Вот пример использования:
$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
$row = $query->row();
echo $row->title;
echo $row->name;
echo $row->body;
}
Вы можете уточнить количество возвращаемых строк в первом параметре:
$row = $query->row(5);
Также вы можете добавить второй строковый параметр, который будет именем класса для экземляра строки:
$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$query->row(0, 'User')
echo $row->name; // аттрибуты вызова
echo $row->reverse_name(); // или методы, определенные классом 'User'
row_array()
Идентично функции выше row(), за исключением того, что возвращает массив:
$query = $this->db->query("YOUR 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 более не доступен