php - query - mysqli fetch_all() no es una función válida?
mysqli query get all rows (10)
Como complemento de la respuesta de Fabrizios, considere construir su matriz con un bucle:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
Gracias a las respuestas he descubierto que no puedo usar fetch_all()
porque estoy usando PHP 5.2.17
- fetch_assoc
con while
loop funcionado.
La función que estoy usando fetch_all
regresa con este error:
Error fatal: llamada al método indefinido mysqli_result :: fetch_all () en
$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();
Puedo conectarme a la base de datos y he sacado filas simples. Cuando coloco la consulta en PHPMYADMIN, recupero 5 filas.
Funciona esta función? ¿Hay alguna manera de que pueda colocar mis datos en una matriz de asociación por mi cuenta?
Error grave de PHP: llamada a la función no definida mysqli_fetch_all ()
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work
cambiar a: php 5.3 o
$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);
Esta función está disponible desde PHP 5.3.0. Posiblemente su versión sea más antigua. Use fetch_assoc()
lugar.
while ($row = $result->fetch_assoc()) {
// do what you need.
}
La forma típica de construir una matriz asociativa es en un ciclo while:
$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
$results_array[] = $row;
}
Solo para agregar una nota adicional sobre el controlador mysqlnd
: También debe tener instalada la extensión de la API mysqli
. Sin la extensión, fetch_all()
aún no estará disponible. Encontré esto al solucionar los problemas de por qué mi código funcionaba en un servidor pero no en otro, tanto PHP> 5.3. Use phpinfo()
para verificar las extensiones instaladas.
Tenía 5.6 pero no funcionó para mí de todos modos. Al habilitar el controlador mysqlnd funcionó para mí. Simplemente escribe apt-get install php5-mysqlnd
luego reinicia php y listo.
Tenga cuidado con el uso de fetch_all ():
http://www.php.net/manual/en/mysqli-result.fetch-all.php#88031
Lea la nota sobre el requisito de mysqldn.
Utilizar
texto fuerte $rows = mysqli_fetch_array($result, MYSQLI_ASSOC);
para lograr el mismo resultado que $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
si no quieres iterar usando la respuesta de Karolis .
Puede cambiar constante a MYSQLI_NUM
o MYSQLI_BOTH
. Este parámetro opcional son constantes que indican qué tipo de matriz se debe producir a partir de los datos de fila actuales.
Al usar la constante MYSQLI_ASSOC, esta función se comportará de manera idéntica a la mysqli_fetch_assoc (), mientras que MYSQLI_NUM se comportará de manera idéntica a la función mysqli_fetch_row (). La opción final MYSQLI_BOTH creará una única matriz con los atributos de ambos. http://php.net/manual/en/mysqli-result.fetch-array.php
mysqli::fetch_all()
necesita el controlador mysqlnd
para ser instalado antes de poder usarlo.
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'';};
}