Recuperar resultados de una consulta

Existe un conjunto de funciones que nos van a permitir, tanto en la metodología orientada a procedimientos como a objetos, recuperar resultados de la consulta.

** Contar filas resultado**

Una de las funcionalidades básicas sobre el resultado de una consulta es contar el número de filas que se han obtenido en la misma. Tendremos una función y atributo para cada caso. Veamos cada uno de ellos:

**Estilo por procedimientos:**

mixto mysqli_num_rows ( mysqli_result $result )

En el primer ejemplo:

if (mysqli_num_rows($result) > 0)...

**Estilo orientado a objetos (atributo):**

class mysqli_result {
   mixto num_rows
}

En el segundo ejemplo:

if ($result->num_rows > 0)...

**Obtener datos de un fila**

Dispondremos de diversas funciones para "_traer_" (fetch) cada una de las filas que contiene la tupla de resultados. Todas ellas devolverán la fila actual apuntada por el cursor y lo moverán a la siguiente fila. La diferencia con la librería anterior es que estas funciones devolverán el valor NULL cuando no haya más filas.

De entre todas las que disponemos destacaremos las siguientes:

**Estilo por procedimientos:**

mixto mysqli_fetch_row ( mysqli_result $result )

**Estilo orientado a objetos (método):**

class mysqli_result {
   mixto fetch_row ( void )
}

En el primer ejemplo mediante procedimientos:

...
while ($fila = mysqli_fetch_row($result))
{
   echo '<tr>';
   echo '<td>' . $fila[0] . '</td>'; //isbn
   echo '<td > '. $fila[1] . '</td>'; //titulo
   echo '<td>'. $fila[2] . '</td>'; //autor
   echo '<td>'. number_format($fila[3], 2) . ' &euro;</td>';//precio
   echo '';
}
...

En el segundo ejemplo mediante objetos:

...
while ($fila = $result->mysqli_fetch_row())
{
   echo '<tr>';
   echo '<td>' . $fila[0] . '</td>'; //isbn
   echo '<td > '. $fila[1] . '</td>'; //titulo
   echo'<td>'. $fila[2] . '</td>'; //autor
   echo'<td>'. number_format($fila[3], 2) . ' &euro;</td>';//precio
   echo'';
}
...

Tanto la función mysqli_fetch_row() como el método obtienen una fila de datos del resultado, representado por el parámetro result y lo devuelve como un array indexado numéricamente, donde cada columna es almacenada en la matriz empezando de 0 (cero).

**Estilo por procedimientos:**

array mysqli_fetch_assoc ( mysqli_result $result )

**Estilo orientado a objetos (método):**

class mysqli_result {
   array fetch_assoc ( void )
}

En el primer ejemplo mediante procedimientos:

...
while ($fila = mysqli_fetch_assoc($result))
{
   LimpiaResultados($fila);
   echo '<tr>';
   echo '<td >'. $fila['isbn'] . '</td>';
   echo '<td > '. $fila['titulo'] . '</td>';
   echo '<td >'. $fila['autor'] . '</td>';
   echo '<td >'. number_format($fila['precio'],2) . '&euro;</td>';
   echo '';
}
...

En el segundo ejemplo mediante objetos:

...
while ($fila = $result->mysqli_fetch_assoc())
{
   LimpiaResultados($fila);
   echo '<tr>';
   echo '<td >'. $fila['isbn'] . '</td>';
   echo '<td > '. $fila['titulo'] . '</td>';
   echo '<td >'. $fila['autor'] . '</td>';
   echo '<td >'. number_format($fila['precio'],2) . '&euro;</td>';
   echo '';
}
...

Tanto la función mysqli_fetch_assoc() como el método, los usaremos para obtener una representación asociativa de la fila actual en el resultado, representado por el parámetro resultado, donde cada clave en la matriz representa el nombre de las columnas en el resultado.

Si dos o más columnas de el resultado tienen el mismo nombre, la última columna tomará precedencia y sobrescribirá lo primero. Por tanto, para acceder a varias columnas con el mismo nombre, se recomienda poner un nombre a la columna.

Los nombres de los campos serán sensibles a mayúsculas y minúsculas.

Por último mencionaremos:

**Estilo por procedimientos:**

mixto mysqli_fetch_object ( mysqli_result $result )

**Estilo orientado a objetos (método):**

class mysqli_result {
   mixto fetch_object ( void )
}

Tanto la función mysqli_fetch_object() como el método, devolverán la fila actual en el resultado como un objeto donde los atributos del objeto representan los nombre de los campos encontrados dentro del resultado.

Para ver más funciones de obtención de datos de una fila, las podemos encontrar en el manual oficial http://docs.php.net/manual/es/mysqli-result.fetch-array.php

Como mencionamos en la extensión MySQL, una buena práctica a la hora de recuperar los valores de los campos es pasarlos por la función stripslashes y limpiar así el valor de caracteres de escape si los hubiere antes de mostrarlo.

En nuestro ejemplo orientado a objetos, hemos utilizado una función que recorre con un iterador todos los atributos del objeto con los datos de la fila, eliminando caracteres de escape para aquellos valores que sean cadenas.

Veamos el código de ejemplo:

<?php
// Función encargada de eliminar caracteres de escape de una fila-objeto.
function LimpiaResultados($objeto)
{
   foreach ($objeto as $atributo => $valor)
     if(is_string($objeto->$atributo) === true)
       $objeto->$atributo = stripslashes($objeto->$atributo);
}
?>

Otra buena práctica antes de insertar un dato de tipo cadena introducido por el usuario a la base de datos, es utilizar addslashes si tenemos a off la opción de **php.ini** magic_quotes_gpc.

results matching ""

    No results matching ""