Foros del Web » Programando para Internet » PHP »

Pasar fetch_all a fetch_array

Estas en el tema de Pasar fetch_all a fetch_array en el foro de PHP en Foros del Web. Buenas noches amigos. Me gustaría pasar de fetch_all a fetch_array. La aplicación está en plan MVC de tal manera: LibrosModelo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver ...
  #1 (permalink)  
Antiguo 14/03/2014, 20:47
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Pasar fetch_all a fetch_array

Buenas noches amigos.

Me gustaría pasar de fetch_all a fetch_array. La aplicación está en plan MVC de tal manera:

LibrosModelo
Código PHP:
Ver original
  1. public function get_libros_slider()
  2.     {
  3.      $result = $this->_db->query("select * from libros WHERE recomendado != 1
  4.     ORDER by rand(".time()."*".time().") limit 6");
  5.      $libros = $result->fetch_all(MYSQLI_ASSOC);
  6.      return $libros;  
  7.     }
LibrosControlador
Código PHP:
Ver original
  1. $slider = $libroModelo->get_libros_slider();
Y la vista que es donde tengo problemas, pues con el "fetch_all" si puedo usar el bucle foreach, pero cuando lo paso a fetch_array, no me funciona.
Código HTML:
Ver original
  1. <!-- bucle inicio -->
  2.             <?php foreach ($slider as $row):?>
  3.                 <div class="libro">
  4.                 <a href="libro.php?id=<?php echo $row['id'];?>">
  5.                 <img src="libros/<?php echo $row['caratula'];?>" alt="">
  6.                 </a>
  7.                 </div>
  8.             <?php endforeach ?>
  9. <!-- bucle fin -->
  #2 (permalink)  
Antiguo 15/03/2014, 01:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pasar fetch_all a fetch_array

Cuando usas fetch_all(MYSQLI_ASSOC) obtienes un array con los nombres de campo como índices, pero con fetch_array() los índices son la posición de cada campo en la tabla, más o menos algo como:

Código:
Campo			Assoc			Array
-------------------	----------------	--------------------
id			id			0
nombre			nombre			1
caratula		caratula		2
otro_campo		otro_campo		3
etc			etc			4
No veo la necesidad o conveniencia de cambiar la forma de leer la consulta, pero, si lo haces, entonces cambia también la forma de acceder a los campos.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/03/2014, 05:46
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Pasar fetch_all a fetch_array

Gracias por contestar Tidy,

No creo que fetch_array los indices sean numéricos y de esa forma, y perdona por no creerlo, pero es que si fuera así sería sencillo recorrer el array con el foreach(clave - valor) y ese es mi problema:

Quiero recorrer el array generado para mostrar todos los valores!

En el código que he pegado, se ve claro lo que deseo.
  #4 (permalink)  
Antiguo 15/03/2014, 06:13
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar fetch_all a fetch_array

Por si aún no nos crees...
mysqli_result::fetch_array
  #5 (permalink)  
Antiguo 15/03/2014, 06:22
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Pasar fetch_all a fetch_array

Lolainas! eso ya lo sé, eso ya lo había mirado!

La cuestión es: ¿Cómo recorro esa array teniendo en cuenta mi aplicación?

Muchas gracias a los dos
  #6 (permalink)  
Antiguo 15/03/2014, 20:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pasar fetch_all a fetch_array

Dónde es que estás haciendo el foreach de cada fila?

Código PHP:
Ver original
  1. foreach($slider as $row) {
  2.        // Recorres las filas obtenidas de la consulta
  3.        foreach($row as $index => $value) {
  4.               // Aquí sí tienes acceso a campo/índice y valor
  5.        }
  6. }
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 15/03/2014, 20:49
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Pasar fetch_all a fetch_array

Lo ves en el codigo de mi pregunta. Igual no se ve muy claro al usar objetos y MVC
  #8 (permalink)  
Antiguo 16/03/2014, 04:18
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar fetch_all a fetch_array

Vamos a ver:

1. fetch_all(): devuelve todas las filas seleccionadas y con MYSQLI_ASSOC le dices que te devuelva cada fila como un array asociativo

2. fetch_array(): devuelve la siguiente fila (sólo una, la siguiente), para usar esta función en lugar de fetch_all deberías usarla así:

Código PHP:
Ver original
  1. $result = $this->_db->query("select * from libros WHERE recomendado != 1
  2.     ORDER by rand(".time()."*".time().") limit 6");
  3. while($row = $result->fetch_array(MYSQLI_ASSOC)) {
  4.     var_dump($row);
  5. }

Vamos, que tu método está bien definido, no tienes necesidad de cambiarlo, sino tu método debería devolver un mysqli_result, en vez de un array con todos los datos de la selección.

Así quedaría si quieres usar fetch array:
Código PHP:
Ver original
  1. public function get_libros_slider()
  2.     {
  3.      return $this->_db->query("select * from libros WHERE recomendado != 1
  4.     ORDER by rand(".time()."*".time().") limit 6");  
  5.     }

Código PHP:
Ver original
  1. <!-- bucle inicio -->
  2.             <?php while($libro = $libroModelo->get_libros_slider()->fetch_array(MYSQLI_ASSOC):?>
  3.                 <div class="libro">
  4.                 <a href="libro.php?id=<?php echo $libro['id'];?>">
  5.                 <img src="libros/<?php echo $libro['caratula'];?>" alt="">
  6.                 </a>
  7.                 </div>
  8.             <?php endwhile; ?>
  9. <!-- bucle fin -->

No tiene misterio, sólo hay que leer la documentación oficial para saber como funciona o qué datos devuelve una función del lenguaje...

Última edición por lolainas; 16/03/2014 a las 04:28

Etiquetas: bucle, foreach
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:09.