Si no lo has leído, conviene que pases antes por el artículo anterior, donde explicamos cómo conectar con una base de datos utilizando Spoon. No obstante, te refrescamos la memoria. Fíjate que hacemos una llamada a un constructor y le pasamos una serie de datos. El objeto que recibimos como respuesta (almacenado en la variable $db) es el que vamos a utilizar para invocar métodos como el que explicaremos en este artículo, getVar().
$db = new SpoonDatabase('mysql', 'localhost', 'root', '', 'probando');
En PHP para obtener un dato simple tenemos que realizar varias llamadas a funciones de base de datos, como extraer el registro por medio de una consulta, generar un array o un objeto con los datos de ese registro y finalmente acceder al campo que deseamos. Todo eso se puede hacer en una única acción con getVar() desde Spoon.
$precio = $db->getVar('SELECT precio FROM producto WHERE id= 1');
Esto nos recuperaría lo que hay en el campo precio del producto con id=1. En caso que no se encuetre ese producto, simplemente nos devolverá null.
Es una función realmente básica, pero que se nos antoja bastante útil en el día a día. Pero además tenemos que mostraros cómo parametrizar esas consultas con Spoon, lo que nos puede dar todavía algunas ventajas adicionales a la hora de escribir código fuente.
En el siguiente ejemplo veremos cómo hacer que en una consulta SQL donde el identificador del usuario que queremos acceder se encuentra parametrizado.
$nombre_del_usuario = $db->getVar('SELECT nombre_completo FROM usuario WHERE id_usuario = ?', 956);
Como hemos visto, en el código SQL el valor del id_usuario está asignado a "?". Eso quiere decir que ese valor es un parámetro que enviaremos en la llamada a getVar(). Ese valor se debe indicar como segundo parámetro en la llamada al método.
En ese caso estamos enviando el valor 956, por lo que getVar() nos devolverá el nombre completo del usuario que tiene el identificador 956. Resulta obvio que ese dato literal lo podemos indicar con una variable para que, dependiendo del valor de la variable, se busque el nombre completo de uno u otro usuario.
$id_usuario_consultar = 340;
$nombre_del_usuario = $db->getVar('SELECT nombre_completo FROM usuario WHERE id_usuario = ?', $id_usuario_consultar);
$ssql = "select nombre_completo from usuario where email=? and password=?";
$nombre_del_usuario = $db->getVar($ssql, array("pepe@desarrolloweb.com", "clavepepe"));
Así estamos recibiendo el nombre_completo de un usuario con el campo email "pepe@desarrolloweb.com" y el campo password "clavepepe".
Veamos el siguiente ejemplo que utiliza identificadores con palabras sencillas de entender a primera vista.
$ssql = "select log from log_acceso_usuario where id_usuario=:identificador_usuario and fecha=:fecha_log";
$log = $db->getVar($ssql, array("identificador_usuario"=>1, "fecha_log"=>"2011-07-04"));
En este caso estamos indicando dos variables que se han parametrizado. La primera un identificador de usuario, con el texto ":identificador_usuario" y la segunda una fecha con el texto ":fecha_log". Luego, en la llamada al método getVar() indicamos esos dos valores en un array asociativo, utilizando índices con los mismos textos escogidos, pero sin colocar los ":".
Si hubiéramos utilizado el método de los "?" y se altera la consulta cambiando el orden de los "?", también deberíamos cambiar el orden del array de valores enviado a getVar(), por lo que el uso del array de valores asociativos resulta más ventajoso.
En este artículo hemos podido mostrar algunas de las ventajas de utilizar la clase de SpoonDatabase, pero nos hemos limitado a explicar cómo trabajar con el método getVar(). Como se puede ver en la documentación, hay mucho más detrás de esa útil clase para el acceso a bases de datos, por lo que en el próximo artículo continuaremos mostrando nuevas funcionalidades, como el acceso a todos los datos de un registro o a varios registros a la vez.