> Manuales > Taller de PHP

Realizamos una función que recibe una fila de un conjunto de registros venido desde una base de datos y declara variables globales con todos los datos de la fila.

Bucle para recibir todos los datos de una fila de un recordset con PHP

Vamos a realizar una función para recibir todos los datos de una fila de un recordset (conjunto de registros extraídos de una base de datos) y declarar todas las columnas o datos que haya en una fila como variables.

En este artículo verás cómo acceder a una base de datos y recuperar un registro de una tabla. Ese registro se va a recorrer de manera genérica y se realizará la declaración de todas las columnas como variables globales a la página. Se trata de una función que realiza un recorrido genérico a todos los datos de cualquier fila y cualquier recordset y va generando las variables globales para trabajar con esos datos.

Las variables globales tendrían como nombre el mismo del campo (que es el mismo nombre que la columna de la tabla asociada a ese dato) y como valor, el dato que guarda esa fila en la columna determinada.

Importante: Toma este artículo como una práctica de acceso a base de datos y la consulta de los datos de una fila, para trabajar con los datos de manera genérica (es decir, sin conocer los nombres de las columnas y sin saber el número de columnas que hay en una fila). De todos modos, consideramos importante mencionar que esta práctica no sería muy adecuada, a no ser que la necesites realizar por algún motivo como que no conozcas a priori los datos que tienes entre manos, o que trabajes con tablas que puedan cambiar en tiempo de ejecución. La parte que no consideramos como buenas prácticas es más bien la de crear variables globales, ya que pueden ser problemáticas desde un punto de vista del mantenimiento del software e incluso de seguridad si estos datos vienen derivados de una entrada del usuario.

En fin, que este artículo lo tomes como un ejemplo de cómo realizar un recorrido genérico a las columnas de un registro de la base de datos, pero no como una práctica que debes reproducir si no tienes algún problema o necesidad concreta que te obligue.

Para una tabla como esta:

id_cliente  nombre_cliente  telefono_cliente
1	        Pepe	        90 000 00 00
2	        Juan	        99 888 88 88
3	        María	        999 99 99 99

Si la función recibiera una fila cualquiera, se generarían variables con nombres id_cliente, nombre_cliente y telefono_cliente y sus valores serían los de esa fila en concreto. Para la fila 1, se generarían las variables:

$id_cliente = 1;
$nombre_cliente = "Pepe";
$telefono_cliente = "90 000 00 00";

El recorrido será genérico, por lo que servirá para cualquier tabla, con cualquier número y nombre de las columnas. Las variables generadas serán siempre las columnas que existan, con los valores de la fila que se haya recibido por parámetro.

Esta función es muy útil para recibir los datos de una fila y meterlos en variables globales, para luego operar con ellos. Como el recorrido es genérico, da igual el número, nombre y tipo de los campos que se van a meter en las variables.

function recibe_fila($fila){
    foreach($fila as $nombre_campo => $valor){
       if (gettype($nombre_campo)!="integer"){
          $asignacion = "\$GLOBALS[\"" . $nombre_campo . "\"]='" . $valor . "';";
          eval($asignacion);
          //echo $asignacion . "<br>";
       }
    }
}

Este ejemplo es similar a otro en el que se realiza un recorrido genérico a las variables recibidas por POST. Las explicaciones de ese artículo pueden venir bien para comprender mejor este.

Un ejemplo de uso de esta función de recorrido genérico a los datos de una fila

Veamos cómo utilizar esta función para recibir los datos de una fila. Se supone que antes de ejecutar estas líneas se debe haber abierto una conexión con la base de datos. También se supone que después de ejecutar este código, se debería cerrar esa conexión con la base de datos.

Entendemos que tienes una idea previa sobre el trabajo con MySQL en PHP. De todos modos, si no es así te recomendamos la lectura del artículo de acceso a bases de datos MySQL desde PHP.

$host = 'localhost'; // por ejemplo: 'localhost'
$usuario = 'user';
$password = 'secret';
$base_datos = 'nombre_de_tu_base_de_datos';

// Conexión a la base de datos usando las funciones mysqli de PHP
$conexion = new mysqli($host, $usuario, $password, $base_datos);

if ($conexion->connect_error) {
    die("fallo con esta conexión... lo sentimos. El error es este: " . $conexion->connect_error);
}

$ssql = "SELECT * FROM cliente WHERE id_cliente=2";
$rs = $conexion->query($ssql);

if ($rs) {
    $fila = $rs->fetch_array();
    recibe_fila($fila);
} else {
    echo "Error: " . $ssql . "<br>" . $conexion->error;
}

// No olvides cerrar la conexión con MySQL cuando hayas terminado
$conexion->close();

Después de estas líneas, se habrán creado las variables globales con los datos de la fila extraída de la tabla cliente, una variable para cada una de las columnas de la fila.

Recuerda una vez más tomar este ejemplo como una práctica posible y un ejemplo de recorrido genérico a las columnas de un registro de base de datos, pero que no es demasiado recomendable crear las variables globales desde una función. Puede darte problemas en tu día a día.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual