Método getVar() para receber um valor único e parametrização de consultas SQL

Explicamos o método getVar( ) além de mostrarmos as regras básicas para parametrização das consultas nas bibliotecas Spoon.

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


Publicado em: 11/11/11
Valorize este artigo:
No artigo anterior começamos a explicar como trabalhar com bases de dados através de Spoon. Já comentamos que a principal vantagem que nos oferece é a de criar de maneira simples uma camada de abstração da base de dados. Porém, ademais , existem algumas funcionalidades adicionais e por isso pode resultar útil trabalhar com a classe de acesso à base de dados que nos oferecem: SpoonDatabase.

Se você não leu esse artigo, é bom que você passe antes por ele artigo anterior, onde explicamos como se conectar com uma base de dados utilizando Spoon. Não obstante, refrescamos sua memória. Observe que fazemos uma chamada a um construtor e lhe passamos uma série de dados. O objeto que recebemos como resposta (armazenado na variável $db) é o que vamos utilizar para invocar métodos como o que explicaremos neste artigo, getVar().

$db = new SpoonDatabase('mysql', 'localhost', 'root', '', 'testando');

Método getVar() para receber um dado simples

Com o método getVar() da classe SpoonDatabase podemos acessar de uma maneira rápida um valor simples de nossa base de dados. Esta função resultará bastante cômoda quando quisermos acessar desde PHP um dado que haja em algum registro de alguma tabela, por exemplo, o preço de um produto.

Em PHP para obter um dado simples temos que realizar várias chamadas a funções de base de dados, como extrair o registro por meio de uma consulta, gerar um array ou um objeto com os dados desse registro e finalmente acessar o campo que desejamos. Tudo isso pode ser feito em uma única ação com getVar() a partir de Spoon.

$preço = $db->getVar('SELECT preço FROM produto WHERE id= 1');

Isto nos recuperaria o que há no campo preço do produto com id=1. No caso de que não se encontre esse produto, simplesmente nos retornará null.

É uma função realmente básica, mas que se antevê como bastante útil no dia –a- dia. Porém , ademais, temos que mostrar para vocês como parametrizar essas consultas com Spoon, o que nos pode dar ainda algumas vantagens adicionais à hora de escrever código fonte.

Nota: a maneira de parametrizar consultas (ou seja, enviar parâmetros sem necessidade de fazer concatenações no código SQL) que veremos a continuação para o método getVar() pode ser utilizada para outros métodos disponíveis na classe SpoonDatabase.

Parametrizar um dado em uma consulta SQL

Ao escrever consultas SQL que queremos enviar ao método getVar() e a outros métodos da classe Database de Spoon, podemos utilizar o caractere interrogação "?" para indicar que se deve substituir por um valor indicado à parte.

No próximo exemplo veremos como fazer que em uma consulta SQL onde o identificador do usuário que queremos acessar se encontra parametrizado.

$nome_do_usuario = $db->getVar('SELECT nome_completo FROM usuario WHERE id_usuario = ?', 956);

Como vimos, no código SQL o valor do id_usuario está atribuido a "?". Isso quer dizer que esse valor é um parâmetro que enviaremos na chamada a getVar(). Esse valor deve ser indicado como segundo parâmetro na chamada ao método.

Nesse caso estamos enviando o valor 956, e por isso getVar() nos retornará o nome completo do usuário que tem o identificador 956. Resulta óbvio que podemos indicar esse dado literal com uma variável para que, dependendo do valor da variável, se busque o nome completo de um ou outro usuário.

$id_usuario_consultar = 340;
$nome_do_usuario = $db->getVar('SELECT nome_completo FROM usuario WHERE id_usuario = ?', $id_usuario_consultar);

Parametrizar vários dados em uma consulta SQL

De uma maneira muito similar podemos parametrizar vários dados em uma consulta SQL. Para tanto, colocaremos vários caracteres interrogação "?" e depois passaremos um array com os valores que devem ser substituídos. É bem simples, como se pode ver a seguir.

$ssql = "select nome_completo from usuario where email=? and password=?";
$nome_do_usuario = $db->getVar($ssql, array("pepe@desarrolloweb.com", "chavepepe"));

Assim estamos recebendo o nome_completo de um usuario com o campo email "pepe@desarrolloweb.com" e o campo password "chavepepe".

Nota: Logicamente, no array enviado a getVar() devemos colocar os valores na mesma ordem em que apareceram os "?" na consulta.

Parametrizar vários dados com identificadores de texto

Em determinadas situações nas que coloquemos vários valores como parâmetro, pode resultar pouco claro à primeira vista o que é cada "?" e talvez para uma leitura de código mais rápida pelas pessoas seja útil colocar textos de variáveis no lugar de interrogações. Para isso, colocaremos os nomes de variáveis que queiramos precedidos de ":", por exemplo ":email" ou ":chave". A seguir, indicaremos esses valores em um array associativo, com os índices que tenhamos escolhido.

Vejamos o seguinte exemplo que utiliza identificadores com palavras fáceis de entender à primeira vista.

$ssql = "select log from log_acesso_usuario where id_usuario=:identificador_usuario and data=:data_log";
$log = $db->getVar($ssql, array("identificador_usuario"=>1, "data_log"=>"2011-07-04"));

Neste caso estamos indicando duas variáveis que foram parametrizadas. A primeira, um identificador de usuário, com o texto ":identificador_usuario" e a segunda, uma data com o texto ":data_log". A seguir, na chamada ao método getVar(), indicamos esses dois valores em um array associativo, utilizando índices com os mesmos textos escolhidos, mas sem colocar os ":".

Nota: Nesse caso, ao utilizar um array associativo, não é requerido que os índices estejam na mesma ordem em que aparecem os parâmetros na consulta, o que pode ser uma excelente ajuda caso mais adiante modifiquemos a consulta e alteremos a ordem em que aparecem os parâmetros.

Se tivéssemos utilizado o método dos "?" e se alterara a consulta mudando a ordem dos "?", também deveríamos mudar a ordem do array de valores enviado a getVar(), de modo que o uso do array de valores associativos resulta mais vantajoso.

Neste artigo conseguimos mostrar algumas das vantagens em utilizar a classe de SpoonDatabase, porém nos limitamos a explicar como trabalhar com o método getVar(). Como se pode ver na documentação, há muito mais por trás dessa útil classe para o acesso a bases de dados, de modo que no próximo artigo continuaremos mostrando novas funcionalidades, como o acesso a todos os dados de um registro ou a vários registros ao mesmo tempo.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

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