PHP 8.2.0 Alpha 2 available for testing

Класс mysqli_result

(PHP 5, PHP 7, PHP 8)


Представляет результирующий набор, полученный из запроса в базу данных.

Обзор классов

class mysqli_result implements IteratorAggregate {
/* Свойства */
public readonly int $current_field;
public readonly int $field_count;
public readonly ?array $lengths;
public readonly int|string $num_rows;
public int $type;
/* Методы */
public __construct(mysqli $mysql, int $result_mode = MYSQLI_STORE_RESULT)
public data_seek(int $offset): bool
public fetch_all(int $mode = MYSQLI_NUM): array
public fetch_array(int $mode = MYSQLI_BOTH): array|null|false
public fetch_assoc(): array|null|false
public fetch_column(int $column = 0): null|int|float|string|false
public fetch_field_direct(int $index): object|false
public fetch_field(): object|false
public fetch_fields(): array
public fetch_object(string $class = "stdClass", array $constructor_args = []): object|null|false
public fetch_row(): array|null|false
public field_seek(int $index): bool
public free(): void
public close(): void
public free_result(): void



Сохраняет буферизованный или небуферизованный результат в виде целого числа (int) (MYSQLI_STORE_RESULT или MYSQLI_USE_RESULT соответственно).

Список изменений

Версия Описание
8.0.0 Класс mysqli_result теперь реализует интерфейс IteratorAggregate. Ранее вместо него был реализован интерфейс Traversable.


  • mysqli_result::__construct — Конструктор объекта mysqli_result
  • mysqli_result::$current_field — Получает смещение указателя по отношению к текущему полю
  • mysqli_result::data_seek — Перемещает указатель результата на выбранную строку
  • mysqli_result::fetch_all — Выбирает все строки из результирующего набора и помещает их в ассоциативный массив, обычный массив или в оба
  • mysqli_result::fetch_array — Выбирает следующую строку из набора результатов и помещает её в ассоциативный массив, обычный массив или в оба
  • mysqli_result::fetch_assoc — Выбирает следующую строку из набора результатов и помещает её в ассоциативный массив
  • mysqli_result::fetch_column — Получает один столбец из следующей строки набора результатов
  • mysqli_result::fetch_field_direct — Получение метаданных конкретного поля
  • mysqli_result::fetch_field — Возвращает следующее поле результирующего набора
  • mysqli_result::fetch_fields — Возвращает массив объектов, представляющих поля результирующего набора
  • mysqli_result::fetch_object — Выбирает следующую строку из набора результатов в виде объекта
  • mysqli_result::fetch_row — Выбирает следующую строку из набора результатов и помещает её в обычный массив
  • mysqli_result::$field_count — Получает количество полей в наборе результатов
  • mysqli_result::field_seek — Установить указатель поля на определённое смещение
  • mysqli_result::free — Освобождает память, занятую результатами запроса
  • mysqli_result::getIterator — Извлекает внешний итератор
  • mysqli_result::$lengths — Возвращает длины полей текущей строки результирующего набора
  • mysqli_result::$num_rows — Получает количество строк в наборе результатов
add a note add a note

User Contributed Notes 7 notes

9 years ago
Converting an old project from using the mysql extension to the mysqli extension, I found the most annoying change to be the lack of a corresponding mysql_result function in mysqli. While mysql_result is a generally terrible function, it was useful for fetching a single result field *value* from a result set (for example, if looking up a user's ID).

The behavior of mysql_result is approximated here, though you may want to name it something other than mysqli_result so as to avoid thinking it's an actual, built-in function.

function mysqli_result($res, $row, $field=0) {
$datarow = $res->fetch_array();

Implementing it via the OO interface is left as an exercise to the reader.
Cem Kayali / cemkayali(a)
3 years ago
Switching from Php5 to Php7, especially if you have worked on an ongoing, long term project, it is unfortunate that there is no mysqli_result function.

So, this may be helpfull and you can call this function as you wish. I assume you do restricted search (searching for single row or few rows only).

function mysqli_result($search, $row, $field){
$i=0; while($results=mysqli_fetch_array($search)){
if ($i==$row){$result=$results[$field];}
return $result;}


$search=mysqli_query($connection, "select name from table_name where id='7'");
$name=mysqli_result($search, 0, "id");

Best wishes,
8 years ago
An "mysqli_result" function where $field can be like table_name.field_name with alias or not.
function mysqli_result($result,$row,$field=0) {
    if (
$result===false) return false;
    if (
$row>=mysqli_num_rows($result)) return false;
    if (
is_string($field) && !(strpos($field,".")===false)) {
        for (
$id=0;$id<mysqli_num_fields($result);$id++) {
            if (
$t_fields[$id]->table==$t_field[0] && $t_fields[$id]->name==$t_field[1]) {
        if (
$field==-1) return false;
    return isset(
12 years ago
Generally, it appears Mysqli OO vs Procedural style has no significant difference in speed, at least with the more generally used functions and methods (connect, close, query, free, etc).

With the fetch_* family of functions and methods dealing with result rows, however, Procedural wins out.  Averaging over a hundred or so tests with a result set of 180,000 records, and using mysqli_fetch_*() functions vs. their mysqli_result::fetch_*() counterpart object methods to read and iterate over all records, all of the mysqli_fetch_*() functions win by ~0.1 seconds less.

This is interesting considering we're dealing with the same result object in both styles.

This was using Vistax64, PHP5.3.2, Mysql 5.1.45, using a bit of this code:


// procedural - takes 0.1 seconds less than OO here
$stopwatch = microtime(true);
$row = mysqli_fetch_assoc($result)){
microtime(true) - $stopwatch;

// OO
$stopwatch = microtime(true);
$row = $result->fetch_assoc()){
microtime(true) - $stopwatch;

blar at blar dot de
13 years ago
Extending the MySQLi_Result


class Database_MySQLi extends MySQLi
    public function
        return new

Database_MySQLi_Result extends MySQLi_Result
    public function

    public function
$rows = array();
$row = $this->fetch())
$rows[] = $row;

marcus at synchromedia dot co dot uk
6 years ago
If you're using the iterator interface on a result instance ($r), like this:

    foreach ($r as $d) {

the iterated value ($d) is an associative-only array, i.e. it's the same as doing this:

    while ($d = $r->fetch_assoc()) {

and NOT like this:

    while ($d = $r->fetch_row()) {

so you can't access row elements by numeric index ($d[0] etc) if you use the foreach syntax.
sinisaculic at gmail dot com
11 years ago
storing this object in ANY kind will result in storing an empty object... if you try to serialize it dump it or do anything with it you will end up with a empty object.

you have to pull all data out f the object and then store the data... no other way.
To Top