Outros métodos de SpoonDatabase

Veremos o método execute() para executar qualquer consulta sobre a base de dados e os métodos para fazer debug das consultas SQL realizadas mediante a classe SpoonDatabase.

Por Miguel Angel Alvarez - Tradução de Celeste Veiga


Publicado em: 13/12/11
Valorize este artigo:
Talvez com o que vimos até agora no Manual das bibliotecas Spoon já teremos dado resposta à maioria das necessidades que poderemos encontrar no trabalho com bases de dados. No entanto, existem outros métodos na classe SpoonDatabase que devemos ter em conta para realizar outras coisas interessantes.

Especificamente, neste artigo vamos ver dois assuntos que consideramos importantes. Por um lado o método execute(), que nos permitirá executar qualquer tipo de consulta, e os métodos para realizar debug das sentenças SQL.

Método execute()

Este método nos servirá como coringa, para realizar todas as operações sobre a base de dados que não estão contempladas entre os métodos existentes na classe SpoonDatabase. Permite-nos executar qualquer tipo de consulta sobre a base de dados e para isso temos que lhe indicar como primeiro parâmetro a sentença SQL que desejamos executar.

Por exemplo, como não existe um método específico para criar tabelas na base de dados, poderíamos criar uma com o método execute(), utilizando o seguinte código:

//Sentença SQL para criar uma tabela
$ssql = 'CREATE TABLE outras_coisas (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
   coisas VARCHAR( 200 ) NOT NULL
)';
//executo a consulta
$db->execute($ssql);

Isto nos criaria a tabela "outras_coisas", com os campos indicados na sentença SQL.

Ademais, podemos enviar um segundo parâmetro à função execute() com a parametrização de valores na consulta a ser executada, tal como admitem outros métodos de SpoonDatabase. Para ver como se realizaria, vamos ver outro exemplo de sentença de inserção um pouco mais complexa.

$ssql = 'insert into usuario (nome_completo, email, password) values (:nom, :mail, :chave)
       ON DUPLICATE KEY update nome_completo = :nom, password=:chave';
$db->execute($ssql, array("nom" => "Lolita Florecita", "mail" => "lolita@florita.com", "chave" => "1234"));

Nota: Esta sentença de INSERT tem o enunciado ON DUPLICATE KEY, que nos permite fazer alguma coisa quando a inserção a realizar duplique algum campo marcado como chave. Neste caso, em nossa tabela de usuário havíamos marcado o campo "email" como índice "UNIQUE", e por essa razão a consulta de inserção daria erro no caso de que houvesse outro usuário com o mesmo "email" que o que se pretende inserir. Com ON DUPLICATE KEY podemos indicar uma sentença UPDATE a ser executada quando o INSERT tivesse esse problema de repetição de chave.

Portanto, com esta chamada a execute() pudemos fazer um insert um pouco mais complexo do que os que poderiam ser feitos a partir do método insert(). O efeito resultante é que, se o email indicado não está repetido em outro usuário da tabela, insere o usuário. Se o email indicado estava repetido em outro usuário, não insere nada, senão que atualiza esse usuário colocando definindo um novo nome e chave.

Debug das sentenças SQL realizadas por meio de Spoon

Á hora de trabalhar com SpoonDatabase, nós não criamos sentenças SQL diretamente, senão que chamamos métodos enviando parâmetros e são estes os que geram o código SQL a ser executado. Em ocasiões que os programas realizados ofereçam resultados inesperados, nos veremos na necessidade de revisar quais são as sentenças SQL que verdadeiramente estão sendo executadas em nosso gestor de base de dados. Para isso existe um modo de debug das sentenças SQL que resulta muito fácil de manejar.

Nota: Na documentaçaõ de Spoon recomendam tratar com cuidado as opções de debug do SQL, pois consomem muitos recursos (memória e CPU). De modo que nos advertem para utilizar a depuração só quando seja necessária e desativá-la quando não vamos usá-la.

O modo de debug das sentenças SQL se ativa com o método setDebug(). Podemos passar um valor booleano, que indique se se ativa (true) ou não (false) o debug. Se não indicamos nada, se supõe que o estamos ativando:

$db->setDebug();

Nota: Nessa linha estamos usando um objeto $db, que devemos ter construído anteriormente com o constructor de SpoonDatabase, passando todos os dados de conexão a nosso servidor de base de dados, tal como foi indicado em artigos anteriores do Manual de Spoon.

Depois poderemos fazer todas as consultas que resultem necessárias para nossa aplicação web, como poderia ser:

//inserto usuario
$dados_usuario = array("nome_completo" => "Juan Bocao", "email" => "jj@bocaoybocao.com", "password" => "loquesea");
$id_usuario = $db->insert('usuario', $dados_usuario);

//busco esse usuario
$record = $db->getRecord("select * from usuario where id_usuario=?", $id_usuario);

//apago esse usuario
$filas_afetadas = $db->delete('usuario', "id_usuario=?", $id_usuario);

Uma vez que tenhamos feito uma ou mais consultas, poderemos invocar o método getQueries() para receber um array com as consultas que Spoon executou na base de dados, de modo que comprovemos se realmente estão corretas.

//mostro as sentenças realizadas
$consultas = $db->getQueries();

Todas as consultas que foram realizadas nos chegarão em um array, que terá uma forma como esta:

Array
(
[0] => Array
(
[query] => INSERT INTO `usuario` (`usuario`.nome_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 mostra o SQL realizado, antes de aplicar a parametrização dos dados da consulta e em seguida um array com todos os parâmetros aplicados a essa SQL. Todo isso será suficiente para que possamos ver se nossas consultas SQL estão bem formadas.

Conclusão

Com isto acabamos o tema das bases de dados em Spoon Library. Como você terá podido comprovar, em muitos casos se economiza código, mas além disso, obtemos uma camada de abstração de base de dados que nos pode ajudar no dia que mudemos de sistema gestor.

Nos artigos seguintes nos dedicaremos já a outros assuntos interessantes que nos oferecem as bibliotecas Spoon.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato