mysqli fetch all() не является допустимой функцией?


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


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

Неустранимая ошибка: Вызов неопределенного метода 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 строк обратно.

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

 41
Author: Phil, 2011-07-14

10 answers

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

while ($row = $result->fetch_assoc()) {
    // do what you need.
}
 45
Author: Karolis, 2011-07-14 14:16:20

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

 28
Author: Hassan Azimi, 2014-10-21 23:31:23

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

$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
  $results_array[] = $row;
}
 18
Author: Michael Berkowski, 2014-03-26 04:03:52

Пожалуйста, будьте осторожны при использовании fetch_all():

Http://www.php.net/manual/en/mysqli-result .fetch-все.php#88031

Прочитайте примечание о требовании mysqldn.

 10
Author: Fabrizio D'Ammassa, 2011-11-06 12:22:04

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

$array = array();
while($row = $result->fetch_assoc())
    $array[] = $row;
 8
Author: Sascha Galley, 2011-07-14 14:16:27

Использовании

сильный текст $rows = mysqli_fetch_array($result, MYSQLI_ASSOC);

чтобы достичь того же результата, как $rows = mysqli_fetch_all($result, MYSQLI_ASSOC); Если вы не хотите, чтобы цикл через Каролис' ответ.

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

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

 1
Author: Wilson, 2018-03-24 10:10:15

Неустранимая ошибка PHP: Вызов неопределенной функции 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);
 0
Author: sirmagid, 2016-02-06 19:39:33

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

 0
Author: Chris Langtiw, 2016-04-15 17:07: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';};
    }
 0
Author: Er Prabhjot Singh Tugger, 2017-03-02 04:29:39

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

 0
Author: Coco, 2017-03-25 02:30:23