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.
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.
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.
En los siguientes artículos nos dedicaremos ya a otros asuntos interesantes que nos ofrecen las librerías Spoon.