Spec-Zone.ru › CodeIgniter 3

Генерация результатов запроса

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

  • Массивы результатов
  • Строки результатов
  • Пользовательские объекты результатов
  • Методы-помощники для результатов
  • Справочник по классам

Массивы результатов

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API