Mysqli while цикл возвращает пустой массив в явно непустом результирующем наборе

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

В PHP я использую mysqli для извлечения результирующего набора из базы данных. После получения этого результирующего набора я затем передаю его функции, которая возвращает объект. Учитывая результирующий набор: Очевидно, непустой результирующий набор

Почему эта функция:

    /**
     * @param resource|mysqli_result $result
     * @return array|bool
     */
    public static function getObjectArray($result) {
        if($result === FALSE) {
            return FALSE;
        }
        $func = ((gettype($result) === 'resource') ? 'mysql' : 'mysqli') . '_fetch_object';
        $array = array();
        while($row = $func($result)) {
            $array[] = $row;
        }
        return $array;
    }
  

возвращает пустой массив. При отладке он просто пропускает тело цикла while. Эта функция работала без проблем в сотнях других мест, но с этим конкретным результирующим набором она проигрывает.

Заранее спасибо.

Комментарии:

1. У меня есть подсказка, проверьте, использует ли это ресурс is_resouce , или, что еще лучше, проверьте, является ли это результирующим набором MySQLi $result instantof mysqli_result

Ответ №1:

Я не знаю подробностей об этом, но похоже, что результирующий набор представляет собой своего рода неявный переход по ссылке. Я разбил его только на ту часть, которая была нарушена, и провел несколько тестов, и даже если я передаю результирующий набор в качестве параметра функции, он устанавливает data_seek оригинала в конец. Я сбрасываю это в результирующем наборе, который я передаю, и он работает нормально. Если у кого-нибудь есть представление о том, что происходит на самом деле, я бы хотел получить более глубокое понимание.

Спасибо