Veremos el método execute() para ejecutar cualquier consulta sobre la base de datos y los métodos para hacer debug de las consultas SQL realizadas mediante la clase SpoonDatabase.
En concreto en este artículo vamos a ver un par de asuntos que consideramos importantes. Por un lado el método execute(), que nos permitirá ejecutar cualquier tipo de consulta, y los métodos para realizar debug de las sentencias SQL.
Método execute()
Este método nos servirá como comodín, para realizar todas las operaciones sobre la base de datos que no están contempladas entre los métodos existentes en la clase SpoonDatabase. Nos permite ejecutar cualquier tipo de consulta sobre la base de datos y para ello tenemos que indicarle como primer parámetro la sentencia SQL que deseamos ejecutar.Por ejemplo, como no existe un método específico para crear tablas en la base de datos, podríamos crear una con el método execute(), utilizando siguiente código:
//Sentencia SQL para crear una tabla
$ssql = 'CREATE TABLE otras_cosas (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
cosas VARCHAR( 200 ) NOT NULL
)';
//ejecuto la consulta
$db->execute($ssql);
Esto nos crearía la tabla "otras_cosas", con los campos indicados en la sentencia SQL.
Además, podemos enviar un segundo parámetro a la función execute() con la parametrización de valores en la consulta a ejecutar, tal como admiten otros métodos de SpoonDatabase. Para ver cómo se realizaría, vamos a ver otro ejemplo de sentencia de inserción un poco más compleja.
$ssql = 'insert into usuario (nombre_completo, email, password) values (:nom, :mail, :clave)
ON DUPLICATE KEY update nombre_completo = :nom, password=:clave';
$db->execute($ssql, array("nom" => "Lolita Florecita", "mail" => "lolita@florita.com", "clave" => "1234"));
Así pues, con esta llamada a execute() hemos podido hacer un insert un poco más complejo que los que se podrían hacer desde el método insert(). El efecto resultante es que, si el email indicado no está repetido en otro usuario de la tabla, inserta el usuario. Si el email indicado estaba repetido en otro usuario, no inserta nada, sino que actualiza dicho usuario colocando definiendo un nuevo nombre y clave.
Debug de las sentencias SQL realizadas por medio de Spoon
A la hora de trabajar con SpoonDatabase, nosotros no creamos sentencias SQL directamente, sino que llamamos a métodos enviando parámetros y son éstos los que generan el código SQL a ejecutar. En ocasiones que los programas realizados ofrezcan resultados inesperados, nos veremos en la necesidad de revisar cuáles son las sentencias SQL que verdaderamente se están ejecutando en nuestro gestor de base de datos. Para ello existe un modo de debug de las sentencias SQL que resulta muy sencillo de manejar.
El modo de debug de las sentencias SQL se activa con el método setDebug(). Podemos pasarle un valor boleano, que indique si se activa (true) o no (false) el debug. Si no indicamos nada, se supone que estamos activándolo:
$db->setDebug();
Luego podremos hacer todas las consultas que resulten necesarias para nuestra aplicación web, como podría ser:
//inserto usuario
$datos_usuario = array("nombre_completo" => "Juan Bocao", "email" => "jj@bocaoybocao.com", "password" => "loquesea");
$id_usuario = $db->insert('usuario', $datos_usuario);
//busco ese usuario
$record = $db->getRecord("select * from usuario where id_usuario=?", $id_usuario);
//borro ese usuario
$filas_afectadas = $db->delete('usuario', "id_usuario=?", $id_usuario);
Una vez que hayamos hecho una o más consultas, podremos invocar al método getQueries() para recibir un array con las consultas que Spoon ejecutó en la base de datos, de modo que comprobemos si realmente están correctas.
//muestro las sentencias realizadas
$consultas = $db->getQueries();
Todas las consultas que se han realizado nos llegarán en un array, que tendrá una forma como esta:
Array
(
[0] => Array
(
[query] => INSERT INTO `usuario` (`usuario`.nombre_completo, `usuario`.email, `usuario`.password) VALUES (?, ?, ?)
[parameters] => Array
(
[0] => Juan Bocao
[1] => jj@bocaoybocao.com
[2] => loquesea
)
)
[1] => Array
(
[query] => select * from usuario where id_usuario=?
[parameters] => Array
(
[0] => 12
)
)
[2] => Array
(
[query] => DELETE FROM `usuario` WHERE id_usuario=?
[parameters] => Array
(
[0] => 12
)
)
)
Como vemos, nos muestra el SQL realizado, antes de aplicar la parametrización de los datos de la consulta y luego un array con todos los parámetros aplicados a esa SQL. Todo ello nos será suficiente para que podamos ver si nuestras consultas SQL estén bien formadas.
Conclusión
Con esto acabamos el tema de las bases de datos en Spoon Library. Como habrás podido comprobar, en muchos casos se ahorra código, pero además obtenemos una capa de abstracción de base de datos que nos puede venir bien el día que cambiemos de sistema gestor.En los siguientes artículos nos dedicaremos ya a otros asuntos interesantes que nos ofrecen las librerías Spoon.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...