Подтвердить что ты не робот

Mysqli fetch_all() не действительная функция?

Благодаря ответам, я понял, что не могу использовать fetch_all(), потому что я использую PHP 5.2.17 - fetch_assoc с обработкой цикла while.


Функция, которую я использую fetch_all, возвращается с этой ошибкой:

Неустранимая ошибка: вызов метода undefined mysqli_result:: fetch_all() в

$mysqli = new mysqli($host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or  $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close(); 

Я могу подключиться к БД, и я вытащил отдельные строки. Когда я помещаю запрос в PHPMYADMIN, я получаю 5 строк назад.

Работает ли эта функция? Есть ли способ разместить мои данные в массиве-помощнике самостоятельно?

4b9b3361

Ответ 1

Эта функция доступна с PHP 5.3.0. Возможно, ваша версия старше. Вместо этого используйте fetch_assoc().

while ($row = $result->fetch_assoc()) {
    // do what you need.
}

Ответ 2

mysqli::fetch_all() должен быть установлен драйвер mysqlnd, прежде чем вы сможете его использовать.

Ответ 3

Типичный способ построения ассоциативного массива состоит в цикле while:

$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
  $results_array[] = $row;
}

Ответ 5

В качестве дополнения к ответам Fabrizios, пожалуйста, подумайте о создании массива с помощью цикла:

$array = array();
while($row = $result->fetch_assoc())
    $array[] = $row;

Ответ 6

У меня было 5.6, но я все равно не работал. Включив драйвер mysqlnd, он работал у меня. Просто напишите apt-get install php5-mysqlnd, затем перезапустите php, и вы хорошо пойдете!

Ответ 7

Если вы не хотите повторять, используя ответ Каролиса, используйте

     while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    {
       $rows[] = $row;
    }

достичь того же результата, что и

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);

Вы можете изменить константу на MYSQLI_NUM или MYSQLI_BOTH. Этот необязательный параметр является константой, указывающей, какой тип массива следует создавать из данных текущей строки.

Обратите внимание, что mysqli_fetch_array($result,MYSQLI_ASSOC ) ведет себя идентично функции mysqli_fetch_assoc(), в то время как mysqli_fetch_array($result,MYSQLI_NUM) будет вести себя идентично функции mysqli_fetch_row(). Последняя опция MYSQLI_BOTH создаст один массив с атрибутами обоих. http://php.net/manual/en/mysqli-result.fetch-array.php


отредактированный
Спасибо Вашему здравому смыслу за исправление.

Ответ 8

Проблема, кажется, "mysqli" и "mysqlnd" не работают вместе. У меня была такая же проблема в cpanel. Следующий ответ, который я нашел здесь, помог мне.

шаги:

1) Перейти к панели инструментов CPanel

2) Зайдите в "Выбор версии PHP", вы должны увидеть несколько флажков

3) Установите версию PHP (5.4 или выше)

4) Снимите флажок с расширения "mysqli" и проверьте "mysqlind" и "nd_mysqli"

Очевидно, "nd_mysqli" - это "mysqli", но он настроен для работы с "mysqlind", и чтобы он работал, вы должны снять флажок "mysqli" из-за конфликтов настроек.

Ответ 9

PHP Неустранимая ошибка: вызов функции undefined mysqli_fetch_all()

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work

измените на: php 5.3 или

$query = "SELECT * FROM `user_counter` ORDER BY id DESC LIMIT 20";
$result =  mysqli_query($connection, $query) or die
("Error in Selecting " . mysqli_error($connection));
$rows = array();
while ($row = $result->fetch_assoc()) {
    $rows[] = $row;
}
echo json_encode($rows);

Ответ 10

Просто добавьте дополнительную заметку о драйвере mysqlnd: он также должен иметь расширение API mysqli. Без расширения fetch_all() все еще не будет доступно. Я нашел это во время устранения неполадок, почему мой код работал на одном сервере, но не в другом, как PHP > 5.3. Используйте phpinfo() для проверки установленных расширений.

Ответ 11

function runQuery($query) {
        $result = mysqli_query($this->conn,$query);
                $resultset  = array(); //you need to define array
                         while($row=$result->fetch_assoc()) {
                              $resultset[] = $row; //then insert result into the array
            }       
            if(!empty($resultset))
            {

            return $resultset;}
            else{return 'empty';};
    }