Ответ 1
Эта функция доступна с PHP 5.3.0. Возможно, ваша версия старше. Вместо этого используйте fetch_assoc()
.
while ($row = $result->fetch_assoc()) {
// do what you need.
}
Благодаря ответам, я понял, что не могу использовать 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 строк назад.
Работает ли эта функция? Есть ли способ разместить мои данные в массиве-помощнике самостоятельно?
Эта функция доступна с PHP 5.3.0. Возможно, ваша версия старше. Вместо этого используйте fetch_assoc()
.
while ($row = $result->fetch_assoc()) {
// do what you need.
}
mysqli::fetch_all()
должен быть установлен драйвер mysqlnd
, прежде чем вы сможете его использовать.
Типичный способ построения ассоциативного массива состоит в цикле while
:
$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
$results_array[] = $row;
}
Пожалуйста, будьте осторожны с использованием fetch_all():
http://www.php.net/manual/en/mysqli-result.fetch-all.php#88031
Прочитайте примечание о требовании mysqldn.
В качестве дополнения к ответам Fabrizios, пожалуйста, подумайте о создании массива с помощью цикла:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
У меня было 5.6, но я все равно не работал. Включив драйвер mysqlnd, он работал у меня. Просто напишите apt-get install php5-mysqlnd
, затем перезапустите php, и вы хорошо пойдете!
Если вы не хотите повторять, используя ответ Каролиса, используйте
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
отредактированный
Спасибо Вашему здравому смыслу за исправление.
Проблема, кажется, "mysqli" и "mysqlnd" не работают вместе. У меня была такая же проблема в cpanel. Следующий ответ, который я нашел здесь, помог мне.
шаги:
1) Перейти к панели инструментов CPanel
2) Зайдите в "Выбор версии PHP", вы должны увидеть несколько флажков
3) Установите версию PHP (5.4 или выше)
4) Снимите флажок с расширения "mysqli" и проверьте "mysqlind" и "nd_mysqli"
Очевидно, "nd_mysqli" - это "mysqli", но он настроен для работы с "mysqlind", и чтобы он работал, вы должны снять флажок "mysqli" из-за конфликтов настроек.
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);
Просто добавьте дополнительную заметку о драйвере mysqlnd
: он также должен иметь расширение API mysqli
. Без расширения fetch_all()
все еще не будет доступно. Я нашел это во время устранения неполадок, почему мой код работал на одном сервере, но не в другом, как PHP > 5.3. Используйте phpinfo()
для проверки установленных расширений.
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';};
}