> Manuales > Spoon, PHP 5 Library

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.

Quizás con lo que hemos visto hasta ahora en el Manual de las librerías Spoon ya habremos dado respuesta a la mayoría de las necesidades que podremos encontrar en el trabajo con bases de datos. Sin embargo, existen otros métodos en la clase SpoonDatabase que debemos tener en cuenta para realizar otras cosas interesantes.

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"));

Nota: Esta sentencia de INSERT tiene el enunciado ON DUPLICATE KEY, que nos permite hacer alguna cosa cuando la inserción a realizar duplique algún campo marcado como llave. En este caso, en nuestra tabla de usuario habíamos marcado el campo "email" como índice "UNIQUE", por lo que la consulta de inserción daría error en el caso que hubiera otro usuario con el mismo "email" que el que se pretende insertar. Con ON DUPLICATE KEY podemos indicar una sentencia UPDATE a ejecutar cuando el INSERT tuviera ese problema de repetición de clave.

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.

Nota: En la documentación de Spoon recomiendan tratar con cuidado las opciones de debug del SQL, pues consumen muchos recursos (memoria y CPU). De modo que nos advierten para utilizar la depuración solo cuando sea necesaria y desactivarla cuando no vayamos a usarla.

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();

Nota: En esa línea estamos usando un objeto $db, que debemos haber construido anteriormente con el constructor de SpoonDatabase, pasando todos los datos de conexión a nuestro servidor de base de datos, tal como se ha indicado en artículos anteriores del Manual de Spoon.

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...

Manual