2011-07-14 27 views
40

Gracias a las respuestas he descubierto que no puedo usar fetch_all() porque estoy usando PHP 5.2.17 - fetch_assoc con while lazo trabajado.mysqli fetch_all() ¿no es una función válida?


La función que estoy usando fetch_all vuelve con este error:

Fatal error: Call to undefined method mysqli_result::fetch_all() in

$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(); 

soy capaz de conectarse a la base de datos y he tirado filas individuales. 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?

Respuesta

43

Esta función está disponible desde PHP 5.3.0. Posiblemente su versión sea más antigua. Use fetch_assoc() en su lugar.

while ($row = $result->fetch_assoc()) { 
    // do what you need. 
} 
+0

Todos ustedes tuvieron la respuesta correcta, simplemente votaron sobre la primera persona: D ¡Gracias chicos! – Phil

8

Como complemento a la respuesta Fabrizios, por favor considere la creación de su matriz con un bucle:

$array = array(); 
while($row = $result->fetch_assoc()) 
    $array[] = $row; 
18

La forma típica de construir una matriz asociativa está en una while bucle:

$results_array = array(); 
$result = $mysqli->query($query); 
while ($row = $result->fetch_assoc()) { 
    $results_array[] = $row; 
} 
27

mysqli::fetch_all() necesita controlador mysqlnd para instalar antes de poder usarlo.

+2

Sí, y si tiene un Roundcube en ejecución (en Debian) dejará de funcionar ya que mysqlnd elimina php-mdb2-driver-mysql y roundcube-mysql driver. Por lo tanto, instale mysqlnd con precaución – trojan

0

PHP Fatal error: Llamada a mysqli_fetch_all función no definida()

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work 

cambio 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); 
0

sólo para añadir una nota adicional sobre el controlador mysqlnd: También tiene que tener la extensión de la API mysqli instalada. 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.

0
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';}; 
    } 
+0

¿Por qué downvote?Este comentario resuelve el problema mientras falla el mysqli_fetch_all() original. Los desarrolladores de PHP deben aprender de este hombre cómo escribir funciones. – user619271

0

Tenía 5,6 pero no funcionó para mí de todos modos. Al habilitar el controlador mysqlnd funcionó para mí. Simplemente escriba apt-get install php5-mysqlnd, luego reinicie php y listo.