Формирование результатов запроса
Существует несколько способов формирования результатов запроса:
Массив Результата
result()
Этот метод возвращает результат запроса в виде массива объектов или пустой массив при неудаче. Обычно вы будете использовать этот метод в цикле foreach, например:
$query = $this->db->query("ВАШ ЗАПРОС");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
Вышеописанный метод является псевдонимом result_object().
Вы также можете передать строку в result(), который представляет собой класс создания экземпляра для каждого объекта результат (Примечание: этот класс должен быть загружен)
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $user)
{
echo $user->name; // получаем атрибуты
echo $user->reverse_name(); // или методы, определенные в классе 'User'
}
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("ВАШ ЗАПРОС");
$row = $query->row();
if (isset($row))
{
echo $row->title;
echo $row->name;
echo $row->body;
}
Если вам нужно получить определенную строку, вы можете указать номер строки числом в качестве первого параметра:
$row = $query->row(5);
Вы также можете добавить вторым параметром строку, которая является именем класса для создания экземпляра строки:
$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$row = $query->row(0, 'User');
echo $row->name; // получаем атрибуты
echo $row->reverse_name(); // или методы, определенные в классе 'User'
row_array()
Идентичен методу row() выше, кроме того что он возвращает массив. Пример:
$query = $this->db->query("ВАШ ЗАПРОС");
$row = $query->row_array();
if (isset($row))
{
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’)
Примечание
Все эти методы будут загружать весь результат в память (предварительная выборка). Используйте unbuffered_row() для обработки больших наборов результатов.
unbuffered_row()
Этот метод возвращает одну строку результата без предзагрузки всего результат в память в отличии от row(). Если ваш запрос содержит более одной строки, он возвращает текущую строку и сдвигает внутренний указатель данных вперед.
$query = $this->db->query("ВАШ ЗАПРОС");
while ($row = $query->unbuffered_row())
{
echo $row->title;
echo $row->name;
echo $row->body;
}
При желании вы можете передать ‘object’ (по умолчание) или ‘array’ для того, чтобы задать тип возвращаемого значения:
$query->unbuffered_row(); // object
$query->unbuffered_row('object'); // объект
$query->unbuffered_row('array'); // ассоциативный массив
Пользовательские Объекты Результата
Вы можете получить результаты запроса как экземпляр пользовательского класса вместо stdClass или массив как позволяют методы result() и result_array(). Требует, чтобы класс уже был загружен в память. Объект будет иметь все значения, возвращаемые из базы данных установленными как свойства. Если они были объявлены и непубличны, то вы должны предоставить __set() метод чтобы их можно было установить.
Пример:
class User {
public $id;
public $email;
public $username;
protected $last_login;
public function last_login($format)
{
return $this->last_login->format($format);
}
public function __set($name, $value)
{
if ($name === 'last_login')
{
$this->last_login = DateTime::createFromFormat('U', $value);
}
}
public function __get($name)
{
if (isset($this->$name))
{
return $this->$name;
}
}
}
Помимо уже перечисленных методов, следующие методы также могут иметь имя класса, чтобы вернуть результаты: first_row(), last_row(), next_row(), and previous_row().
custom_result_object()
Возвращает полный результирующий набор массива экземпляров указанного класса. Единственный параметр - имя класса для инициализации.
Пример:
$query = $this->db->query("ВАШ ЗАПРОС");
$rows = $query->custom_result_object('User');
foreach ($rows as $row)
{
echo $row->id;
echo $row->email;
echo $row->last_login('Y-m-d');
}
custom_row_object()
Возвращает одну строку из результатов запроса. Первый параметр - номер строки результата. Второй параметр - имя класса для инициализации.
Пример:
$query = $this->db->query("ВАШ ЗАПРОС");
$row = $query->custom_row_object(0, 'User');
if (isset($row))
{
echo $row->email; // получаем атрибуты
echo $row->last_login('Y-m-d'); // получаем методы класса
}
Вы также можете использовать метод row() точно таким же образом.
Example:
$row = $query->custom_row_object(0, 'User');
Вспомогательные Методы Результатов Запроса
num_rows()
Количество строк, возвращаемых запросом. Примечание: В этом примере, $query - переменная, которой присваивается объект результата запроса:
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
Примечание
Не все драйверы баз данных способны получить общее количество строк в результирующем наборе. В этом случае, все данные кешируются и могут быть подсчитаны вручную методом count(), чтобы достичь того же результата.
num_fields()
Количество ПОЛЕЙ (столбцов) возвращенных запросом. Убедитесь в том, что вызваемый метод, использует результат запроса объекта:
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_fields();
free_result()
Освобождает память связанную с результатом и удаляет ресурс результата ID. Обычно 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 больше не будет доступен
data_seek()
Этот метод устанавливает внутренний указатель на следующую строку, извлеченного результата. Это полезно только в сочетании с unbuffered_row().
Он принимает положительное целочисленное значение, которое по умолчанию равно 0 и возвращает TRUE при успехе или FALSE в случае неудачи.
$query = $this->db->query('SELECT `field_name` FROM `table_name`');
$query->data_seek(5); // Пропускает первые 5 строк
$row = $query->unbuffered_row();
Примечание
Не все драйвера баз данных поддерживают эту функцию и возвращают FALSE. Прежде всего вы не сможете использовать его с PDO.
Справка Класса
- class CI_DB_result
- result([$type = 'object'])
Параметры: - $type (строка) – Тип запрашиваемых результатов - массив, объект или имя класса
Возвращает: Массив, содержащий выбранные строки
Возвращаемый тип: массив
Обертка для result_array(), result_object() и custom_result_object() методов.
Использование: см. Массив Результата.
- result_array()
Возвращает: Массив, содержащий выбранные строки Возвращаемый тип: массив Возвращает результаты запроса в виде массива строк, где каждая строка представляет собой ассоциативный массив.
Использование: см. Массив Результата.
- result_object()
Возвращает: Массив, содержащий выбранные строки Возвращаемый тип: массив Возвращает результаты запроса в виде массива строк, где каждая строка представляет собой объект stdClass.
Использование: см. Массив Результата.
- custom_result_object($class_name)
Параметры: - $class_name (строка) – Имя класса для строк результата
Возвращает: Массив, содержащий выбранные строки
Возвращаемый тип: массив
Возвращает результат запроса в виде массива строк, где каждая строка является экземпляром указанного класса.
- row([$n = 0[, $type = 'object']])
Параметры: - $n (число) – Индекс строки запроса которая должна быть возвращена
- $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Требуемую строку или NULL если таковой не существует
Возвращаемый тип: смешанный
Обертка для row_array(), row_object() и ``custom_row_object() методов.
Использование: см. Массив Результата.
- unbuffered_row([$type = 'object'])
Параметры: - $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Следующую строку запроса или NULL если таковой не существует
Возвращаемый тип: смешанный
Выбирает следующую строку результата и возвращает ее в запрошенной форме.
Использование: см. Массив Результата.
- row_array([$n = 0])
Параметры: - $n (число) – Индекс строки запроса которая должна быть возвращена
Возвращает: Требуемую строку или NULL если таковой не существует
Возвращаемый тип: массив
Возвращает запрошенный строку результата в виде ассоциативного массива.
Использование: см. Массив Результата.
- row_object([$n = 0])
Параметры: - $n (число) – Индекс строки запроса которая должна быть возвращена
Возвращает: Требуемую строку или NULL если таковой не существует
Возвращаемый тип: stdClass
Возвращает запрошенную строку результата как объект типа stdClass.
Использование: см. Массив Результата.
- custom_row_object($n, $type)
Параметры: - $n (число) – Индекс строки возвращаемых результатов
- $class_name (строка) – Имя класса для результирующей строки
Возвращает: Требуемую строку или NULL если таковой не существует
Возвращаемый тип: $type
Возвращает запрошенную строку результата как экземпляр запрашиваемого класса.
- data_seek([$n = 0])
Параметры: - $n (число) – Индекс строки следующей для получения результата
Возвращает: TRUE при успехе, FALSE в случае неудачи
Возвращаемый тип: булево
Перемещает внутренний указатель в результатах запроса до нужнного смещения.
Использование: см. Вспомогательные Методы Результатов Запроса.
- set_row($key[, $value = NULL])
Параметры: - $key (смешанный) – Имя столбца или массив пары ключ/значение
- $value (смешанный) – Значение, присваиваемое столбцу, $key как одно имя поля
Возвращаемый тип: пустота
Присваивает значение определенному столбцу.
- next_row([$type = 'object'])
Параметры: - $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Следующую строку из результирующего набора, или NULL если он не существует
Возвращаемый тип: смешанный
Возвращает следующую строку из результирующего набора.
- previous_row([$type = 'object'])
Параметры: - $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Предыдущую строку из результирующего набора, или NULL если он не существует
Возвращаемый тип: смешанный
Возвращает предыдущую строку из результирующего набора.
- first_row([$type = 'object'])
Параметры: - $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Первую строку из результирующего набора, или NULL если он не существует
Возвращаемый тип: смешанный
Возвращает первую строку из результирующего набора.
- last_row([$type = 'object'])
Параметры: - $type (строка) – Тип требуемого результата - массив, объект или имя класса
Возвращает: Последнюю строку из результирующего набора, или NULL если он не существует
Возвращаемый тип: смешанный
Возвращает последнюю строку из результирующего набора.
- num_rows()
Возвращает: Количество строк в результирующем наборе Возвращаемый тип: число Возвращает количество строк в результирующем наборе.
Использование: см. Вспомогательные Методы Результатов Запроса.
- num_fields()
Возвращает: Количество полей в результирующем наборе Возвращаемый тип: число Возвращает количество полей в результирующем наборе.
Использование: см. Вспомогательные Методы Результатов Запроса.
- field_data()
Возвращает: Массив, содержащий поля мета-данных Возвращаемый тип: массив Создает массив stdClass объектов содержащий поля мета-данных.
- free_result()
Возвращаемый тип: пустота Освобождает результирующий набор.
Использование: см. Вспомогательные Методы Результатов Запроса.