Veremos en este artículo cómo acceder a varios registros de una base de datos con las librerías Spoon, utilizando el método getRecord() y getRecords().
Ahora vamos a dedicarnos a ver otros métodos un poco más avanzados para el acceso a bases de datos, en concreto los métodos getRecord() y getRecords() que nos sirven para acceder a varios campos de un registro o a varios campos de varios registros. En definitiva, todo lo que realizamos habitualmente con setencias SQL de tipo SELECT.
Recibiendo un registro único
La función getRecord() de Spoon permite acceder a un único registro de una tabla. Nos devuelve un array asociativo de una dimensión cuyos índices son los nombres de los campos, que tienen los valores almacenados en ellos.
El método getRecord() recibe la consulta que se desea realizar, en la que se pueden parametrizar diversos valores tal como vimos en el método getVar().
$ssql = "select * from usuario where id_usuario=?";
$registro = $db->getRecord($ssql, 1);
En este ejemplo estamos recibiendo los datos del usuario que tiene identificador de usuario id_usuario=1 (El "?" se reemplaza por el valor pasado a getRecord() en su segundo parámetro).
Lo que obtenemos en la variable $registro es un array con todos los campos del usuario consultado. Si hiciéramos un dump con el método estático dump() de la clase Spoon:
Spoon::dump($registro, false);
Obtendríamos una salida parecida a la siguiente:
array(4) {
["id_usuario"] => string(1) "1"
["nombre_completo"] => string(20) "Miguel Angel Alvarez"
["email"] => string(26) "correo.miguel@desarrolloweb.com"
["password"] => string(6) "mm123456"
}
Cabe decir que, si no se encuentra ningún registro en la consulta, la función getRecord() devolvería null. Nosotros deberíamos tratar ese valor de retorno para asegurarnos que no es null antes de acceder a los campos del array asociativo.
if($registro){
echo "<p>El nombre de ese usuario era: " . $registro["nombre_completo"];
echo " y el email de ese usuario: " . $registro["email"];
}else{
echo "No recibí ningún registro!";
}
Recuperar varios registros a la vez
La función comentada en el epígrafe anterior getRecord() devuelve siempre un array de una única dimensión. Es decir que, si la consulta a ejecutar devolviera varios registros, solamente se te entregaría un array de una dimensión conteniendo el primero de ellos.Sin embargo, en tu día a día como desarrollador, probablemente te resulte más habitual hacer consultas tradicionales, en las que obtengas una serie de registros. Para ello debes utilizar el método getRecords(), que devuelve un array bidimensional, conteniendo varios registros.
$ssql = "select * from usuario";
$registro = $db->getRecords($ssql);
En este ejemplo obtendríamos un array con 2 dimensiones. El índice principal empieza en cero y contiene tantos elementos como registros encontrados. El cada uno de ellos tendríamos cada uno de los usuarios de nuestra tabla usuario.
El contenido de retorno tendrá una forma parecida a esta:
array(2) {
[0] => array(4) {
["id_usuario"] => string(1) "1"
["nombre_completo"] => string(20) "Miguel Angel Alvarez"
["email"] => string(26) "correo.miguel@desarrolloweb.com"
["password"] => string(6) "miguelito"
}
[1] => array(4) {
["id_usuario"] => string(1) "2"
["nombre_completo"] => string(20) "Pepe Pedrales García"
["email"] => string(22) "pepe@desarrolloweb.com"
["password"] => string(9) "clavepepe"
}
}
Ese ejemplo donde recuperamos varios registros se puede complicar todo lo que deseemos, parametrizando datos en la consulta y realizando operaciones típicas de base de datos como unión de tablas. Por ejemplo, puedes ver a continuación algo un poco más elaborado.
$ssql = "select us.nombre_completo, log.id_log_acceso_usuario, log.fecha, log.log from usuario as us inner join log_acceso_usuario as log on log.id_usuario=us.id_usuario where us.id_usuario=:id_usuario and log.fecha=:fecha";
$registro = $db->getRecords($ssql, array("id_usuario"=>1, "fecha"=>"2011-07-12"), "id_log_acceso_usuario");
En este caso vemos cómo se utilizan un par de parámetros en la consulta, enviados en un array pasado como segundo parámetro en getRecords(). Pero además hay un tercer parámetro que nos permite esta función específicamente que sirve para alterar los identificadores principales del array principal.
En este caso como tercer parámetro hemos colocado el valor "id_log_acceso_usuario", lo que quiere decir que en el identificado del primer array se utilizará los valores de los registros que haya en el campo "id_log_acceso_usuario". Esto te puede servir para que, si quieres acceder rápidamente a registros determinados del array cuyos identificadores conoces, no tengas que hacer una nueva búsqueda dentro del array, sino utilizar esos identificadores que ya tienes.
Para intentar aclarar este último punto, puedes ver el array que me devolvería la anterior llamada a getRecords():
array(2) {
[2] => array(4) {
["nombre_completo"] => string(20) "Miguel Angel Alvarez"
["id_log_acceso_usuario"] => string(1) "2"
["fecha"] => string(10) "2011-07-12"
["log"] => string(37) "Acceso no permitido a las 15:01 horas"
}
[4] => array(4) {
["nombre_completo"] => string(20) "Miguel Angel Alvarez"
["id_log_acceso_usuario"] => string(1) "4"
["fecha"] => string(10) "2011-07-12"
["log"] => string(34) "Acceso concedido a las 19:18 horas"
}
}
Si te fijas, en el array principal tienes unos identificadores que no parten desde cero, sino que se utilizan los valores que había en el campo "id_log_acceso_usuario" de nuestra base de datos.
Hasta ahora solo hemos visto sentencias de selección de datos, por lo que pronto pasaremos a otras operaciones sobre tablas, como inserciones o actualizaciones. No obstante, esperamos que lo explicado hasta el momento te haya dado una visión interesante sobre las posibilidades de la capa de abstracción de base de datos de las librerías Spoon.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...