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

У меня проблемы с PHP в Ubuntu 10.04. Когда я пытаюсь использовать mysqli_result::fetch_all, появляется эта ошибка:

Вызов неопределенного метода mysqli_result::fetch_all()

Тем не менее, это работает в Windows XP.

Код:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);

Я не хочу использовать fetch_assoc с циклом, потому что я отправляю результат на другой уровень для обработки.

Я использую PHP 5.4.4. и с помощью php -m | grep mysql модуль mysqlnd не отображается. Как я могу установить его? Может ли это быть проблема?


person Stokres    schedule 26.07.2012    source источник
comment
Когда вы говорите, что это работает на другой платформе, вы имеете в виду две отдельные установки PHP и MySql? Или вы имеете в виду браузер?   -  person Lix    schedule 26.07.2012
comment
Пожалуйста, проверьте мой ответ здесь. stackoverflow.com/a/56677161/3571603   -  person javatar    schedule 20.06.2019


Ответы (3)


Для mysqli_result::fetch_all() требуется встроенный драйвер MySQL (mysqlnd).

скорее всего, вы могли бы пропустить его.

взгляните на эти сообщения, которые могут вам помочь.

mysqli fetch_all() недопустимая функция?

person Ibrahim Azhar Armar    schedule 26.07.2012
comment
Пользователи Ubuntu могут просто сделать: sudo apt-get install php5-mysqlnd - person Aust; 07.01.2015
comment
@Ibrahim, Где скачать? - person Pacerier; 29.06.2015
comment
@Pacerier, какую ОС ты используешь? - person Ibrahim Azhar Armar; 29.06.2015
comment
@IbrahimAzharArmar, сервер Win 2003. - person Pacerier; 29.06.2015
comment
Попробуйте включить расширение mysqlnd, перейдите по ссылке здесь для получения справки stackoverflow.com/questions/23158943/ - person Ibrahim Azhar Armar; 29.06.2015
comment
вот еще несколько ссылок для справки, php.net/manual/en/mysqlnd.install .php, dev.mysql.com/downloads/connector/php- mysqlnd, к сожалению, я не использую Windows и, следовательно, не могу протестировать, если это не сработает, попробуйте обновить версию php, возможно, она сработает. - person Ibrahim Azhar Armar; 29.06.2015

fetch_all потребляет больше памяти, чем fetch_array(), и имеет другие вредные побочные эффекты, поэтому вместо исправления fetch_all лучше использовать fetch_array или fetch_assoc.

Подробно из документации PHP:

Доступно только с mysqlnd.

Поскольку mysqli_fetch_all() возвращает все строки в виде массива за один шаг, она может потреблять больше памяти, чем некоторые аналогичные функции, такие как mysqli_fetch_array(), которая возвращает только одну строку за раз из набора результатов. Кроме того, если вам нужно выполнить итерацию по результирующему набору, вам понадобится циклическая конструкция, которая еще больше повлияет на производительность. По этим причинам mysqli_fetch_all() следует использовать только в тех ситуациях, когда извлеченный набор результатов будет отправлен на другой уровень для обработки.

Если вы действительно хотите его использовать, вам нужно установить MySQL с родным диском (mysqlnd). Пример установки:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

В Ubuntu вы можете просто сделать

sudo apt-get install php5-mysqlnd
person wonton    schedule 14.01.2013
comment
Но где твой ответ на вопрос? - person Sebastian Mach; 07.10.2015
comment
Это должен быть комментарий - person Leandro Bardelli; 13.10.2020

http://www.php.net/manual/en/mysqli-result.fetch-all.php

Доступно только с mysqlnd.

Примечания о включении mysqlnd: http://www.php.net/manual/en/mysqlnd.install.php

person Timur    schedule 26.07.2012