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?
10 answers
Эта функция доступна с 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-все.php#88031
Прочитайте примечание о требовании mysqldn.
В качестве дополнения к ответу Фабрицио, пожалуйста, рассмотрите возможность создания массива с помощью цикла:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
Использовании
сильный текст $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
Неустранимая ошибка 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);
Просто чтобы добавить дополнительное примечание о драйвере 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';};
}
У меня было 5,6, но все равно не работало на меня. Включив драйвер mysqlnd, он сработал для меня. Просто напишите apt-get install php5-mysqlnd
, затем перезапустите php, и все готово!