Формирование результатов запроса 

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

Массив Результата 

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() 
Возвращаемый тип:пустота

Освобождает результирующий набор.

Использование: см. Вспомогательные Методы Результатов Запроса.

list_fields() 
Возвращает:Массив имен столбцов
Возвращаемый тип:массив

Возвращает массив, содержащий имена полей в результирующем наборе.