Генерация результатов запроса
Существует несколько способов генерации результатов запроса:
- Массивы результатов
- Строки результатов
- Пользовательские объекты результатов
- Методы-помощники для результатов
- Справочник по классам
Массивы результатов
result()
Этот метод возвращает результат запроса в виде массива объектов или пустого массива при ошибке. Обычно вы используете его в цикле foreach, например так:
$query = $this->db->query("YOUR 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; // access attributes
echo $user->reverse_name(); // or methods defined on the 'User' class
}
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");
$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; // access attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
row_array()
Идентично вышеуказанному row() методу, за исключением того, что он возвращает массив. Пример:
$query = $this->db->query("YOUR QUERY");
$row = $query->row_array();
if (isset($row))
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
Если вам нужна определённая строка, вы можете передать номер строки как число в первый параметр:
$row = $query->row_array(5);
Кроме того, вы можете переходить вперёд/назад/к началу/концу результатов, используя эти вариации:
По умолчанию они возвращают объект, если вы не добавите слово «массив» в параметр:
Примечание
Все методы выше загружают весь результат в память (предварительная загрузка). Используйте unbuffered_row() для обработки больших наборов результатов.
unbuffered_row()
Этот метод возвращает одну строку результата без предварительной загрузки всего результата в память, как это делает row(). Если ваш запрос содержит более одной строки, он возвращает текущую строку и перемещает внутренний указатель данных вперёд.
$query = $this->db->query("YOUR QUERY");
while ($row = $query->unbuffered_row())
{
echo $row->title;
echo $row->name;
echo $row->body;
}
Вы можете необязательно передать «объект» (по умолчанию) или «массив», чтобы указать тип возвращаемого значения:
$query->unbuffered_row(); // object
$query->unbuffered_row('object'); // object
$query->unbuffered_row('array'); // associative array
Пользовательские объекты результатов
Вы можете получить результаты как экземпляр пользовательского класса вместо объекта или массива, как позволяют методы 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(), и previous_row().
custom_result_object()
Возвращает весь набор результатов в виде массива экземпляров запрошенного класса. Единственный параметр — имя класса для создания экземпляра.
Пример:
$query = $this->db->query("YOUR 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("YOUR QUERY");
$row = $query->custom_row_object(0, 'User');
if (isset($row))
{
echo $row->email; // access attributes
echo $row->last_login('Y-m-d'); // access class methods
}
Вы также можете использовать метод row() точно так же.
Пример:
$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()
Освобождает память, связанную с результатом, и удаляет идентификатор ресурса результата. Обычно PHP автоматически освобождает память в конце выполнения сценария. Однако, если вы выполняете много запросов в конкретном сценарии, вы можете освободить результат после генерации каждого результата запроса, чтобы уменьшить потребление памяти.
Пример:
$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // The $query result object will no longer be available
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // The $query2 result object will no longer be available
data_seek()
Этот метод устанавливает внутренний указатель для следующей строки результата, которая будет извлечена. Он полезен только в сочетании с unbuffered_row().
Он принимает целое положительное число, которое по умолчанию равно 0, и возвращает TRUE при успехе или FALSE при ошибке.
$query = $this->db->query('SELECT `field_name` FROM `table_name`');
$query->data_seek(5); // Skip the first 5 rows
$row = $query->unbuffered_row();
Примечание
Не все драйверы баз данных поддерживают эту функцию и вернут FALSE. В частности, вы не сможете использовать её с PDO.
Справочник по классам
-
class CI_DB_result -
-
result([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенных результатов - массив, объект или имя класса
Возвращает: Массив, содержащий полученные строки
Тип возвращаемого значения: array
Обёртка для методов
result_array(),result_object()иcustom_result_object().Использование: см. Массивы результатов.
-
result_array() -
Возвращает: Массив, содержащий полученные строки Тип возвращаемого значения: array Возвращает результаты запроса в виде массива строк, где каждая строка — это ассоциативный массив.
Использование: см. Массивы результатов.
-
result_object() -
Возвращает: Массив, содержащий полученные строки Тип возвращаемого значения: array Возвращает результаты запроса в виде массива строк, где каждая строка — объект типа
stdClass.Использование: см. Массивы результатов.
-
custom_result_object($class_name) -
Параметры: - $class_name (string) – Имя класса для результирующих строк
Возвращает: Массив, содержащий полученные строки
Тип возвращаемого значения: array
Возвращает результаты запроса в виде массива строк, где каждая строка является экземпляром указанного класса.
-
row([$n = 0[, $type = 'object']]) -
Параметры: - $n (int) – Индекс строки результатов запроса, который нужно вернуть
- $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Запрошенную строку или NULL, если её нет
Тип возвращаемого значения: mixed
Обёртка для методов
row_array(),row_object() and ``custom_row_object().Использование: см. Строки результатов.
-
unbuffered_row([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Следующую строку из набора результатов или NULL, если она не существует
Тип возвращаемого значения: mixed
Извлекает следующую строку результата и возвращает её в запрошенном формате.
Использование: см. Строки результатов.
-
row_array([$n = 0]) -
Параметры: - $n (int) – Индекс строки результатов запроса, который нужно вернуть
Возвращает: Запрошенную строку или NULL, если её нет
Тип возвращаемого значения: array
Возвращает запрошенную строку результатов в виде ассоциативного массива.
Использование: см. Строки результатов.
-
row_object([$n = 0]) -
Параметры: - $n (int) – Индекс строки результатов запроса, который нужно вернуть
Возвращает: Запрошенную строку или NULL, если её нет
Тип возвращаемого значения: stdClass
Возвращает запрошенную строку результатов как объект типа
stdClass.Использование: см. Строки результатов.
-
custom_row_object($n, $type) -
Параметры: - $n (int) – Индекс строки результатов для возврата
- $class_name (string) – Имя класса для результирующей строки
Возвращает: Запрошенную строку или NULL, если её нет
Тип возвращаемого значения: $type
Возвращает запрошенную строку результатов как экземпляр запрошенного класса.
-
data_seek([$n = 0]) -
Параметры: - $n (int) – Индекс строки результатов, которая должна быть возвращена далее
Возвращает: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool
Перемещает внутренний указатель на строку результата на нужное смещение.
Использование: см. Вспомогательные методы результата.
-
set_row($key[, $value = NULL]) -
Параметры: - $key (mixed) – Имя столбца или массив пар ключ/значение
- $value (mixed) – Значение, которое нужно присвоить столбцу, $key — имя одного поля
Тип возвращаемого значения: void
Присваивает значение определённому столбцу.
-
next_row([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Следующая строка набора результатов или NULL, если её нет
Тип возвращаемого значения: mixed
Возвращает следующую строку из набора результатов.
-
previous_row([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Предыдущая строка набора результатов, или NULL, если её нет
Тип возвращаемого значения: mixed
Возвращает предыдущую строку из набора результатов.
-
first_row([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Первая строка набора результатов или NULL, если её нет
Тип возвращаемого значения: mixed
Возвращает первую строку из набора результатов.
-
last_row([$type = 'object']) -
Параметры: - $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает: Последняя строка набора результатов, или NULL, если её нет
Тип возвращаемого значения: mixed
Возвращает последнюю строку набора результатов.
-
-
num_rows() -
Возвращает: Количество строк в наборе результатов Тип возвращаемого значения: int Возвращает количество строк в наборе результатов.
Использование: см. Методы помощника для результатов.
-
num_fields() -
Возвращает: Количество полей в наборе результатов Тип возвращаемого значения: int Возвращает количество полей в наборе результатов.
Использование: см. Методы помощника для результатов.
-
field_data() -
Возвращает: Массив, содержащий метаданные поля Тип возвращаемого значения: array Генерирует массив объектов
stdClass, содержащих метаданные поля.
-
free_result() -
Тип возвращаемого значения: void Освобождает набор результатов.
Использование: см. Методы помощника для результатов.
-
list_fields() -
Возвращает: Массив имён столбцов Тип возвращаемого значения: array Возвращает массив, содержащий имена полей в наборе результатов.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/database/results.html