Saltar la navegación

3.1.4.- Obtención y utilización de conjuntos de resultados.

Imagen de un cilindro simulando una base de datos y dos hohas de papel delante.
Everaldo Coelho (GNU/GPL)

Ya sabes que al ejecutar una consulta que devuelve datos obtienes un objeto de la clase mysqli_result. Esta clase sigue los criterios de ofrecer un interface de programación dual, es decir, una función por cada método con la misma funcionalidad que éste.

Para trabajar con los datos obtenidos del servidor, tienes varias posibilidades:

  • fetch_array (función mysqli_fetch_array). Obtiene un registro completo del conjunto de resultados y lo almacena en un array. Por defecto el array contiene tanto claves numéricas como asociativas. Por ejemplo, para acceder al primer campo devuelto, podemos utilizar como clave el número 0 o su nombre indistintamente.
$resultado = $conProyecto->query('SELECT producto, unidades FROM stocks WHERE unidades<2');

$stock = $resultado->fetch_array();  // Obtenemos el primer registro

$producto = $stock['producto'];  // O también $stock[0];

$unidades = $stock['unidades'];  // O también $stock[1];

echo "<p>Producto $producto: $unidades unidades.</p>";

Este comportamiento por defecto se puede modificar utilizando un parámetro opcional, que puede tomar los siguientes valores:

  1. MYSQLI_NUM. Devuelve un array con claves numéricas.
  2. MYSQLI_ASSOC. Devuelve un array asociativo.
  3. MYSQLI_BOTH. Es el comportamiento por defecto, en el que devuelve un array con claves numéricas y asociativas.
  • fetch_assoc (función mysqli_fetch_assoc). Idéntico a fetch_array pasando como parámetro MYSQLI_ASSOC.
  • fetch_row (función mysqli_fetch_row). Idéntico a fetch_array pasando como parámetro MYSQLI_NUM.
  • fetch_object (función mysqli_fetch_object). Similar a los métodos anteriores, pero devuelve un objeto en lugar de un array. Las propiedades del objeto devuelto se corresponden con cada uno de los campos del registro.

Parar recorrer todos los registros de un array, puedes hacer un bucle teniendo en cuenta que cualquiera de los métodos o funciones anteriores devolverán null cuando no haya más registros en el conjunto de resultados.

$resultado = $conProyecto->query('SELECT producto, unidades FROM stocks WHERE unidades<2');

$stock = $resultado->fetch_object();

while ($stock != null) {

        echo "<p>Producto $stock->producto: $stock->unidades unidades.</p>";

        $stock = $resultado->fetch_object();

}

 

Para saber más

En el manual de PHP tienes más información sobre los métodos y propiedades de la clase mysqli_result.

Clase mysqli_result.

Recomendación

Imagen de la letra B
Bootstrap (Dominio público)


A la hora de empezar a elaborar proyectos más complejos, cuidar la presentación de las páginas es muy importante y el CSS nos puede llevar mucho tiempo, por eso se recomienda encarecidamente que uses frameworks de hojas de estilos ya diseñadas como Bootstrap.

Es un framework CSS que te permitirá crear sitios web y aplicaciones web totalmente responsive sin necesidad de complicados estilos.

Enlace a Documentación Bootstrap

Ejercicio resuelto

Crea una página web en la que se muestren las unidades existentes de un determinado producto en cada una de las tiendas. Para seleccionar el producto concreto utiliza un cuadro de selección dentro de un formulario en esa misma página. Puedes usar como base los siguientes ficheros.