Благодаря ответам, я выяснил, что я не могу использовать fetch_all()
потому что я использую PHP 5.2.17
– fetch_assoc
с fetch_assoc
циклом.
Функция, которую я использую 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 строк назад.
Работает ли эта функция? Есть ли способ разместить мои данные в массиве-помощнике самостоятельно?
Эта функция доступна с PHP 5.3.0. Возможно, ваша версия старше. fetch_assoc()
этого используйте 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;
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, и вы хорошо пойдете!