Criando Cláusulas SQL Dinamicamente
Como eu uso classes de abstração de banco de dados em meus sites, eu simplesmente extendo essa classe em todas as elas.
Exemplo:
Então, a classe clausulas_sql, contém a variável clausula_sql onde são armazenadas as últimas cláusulas geradas. E na hora de chamar a função query, caso não seja fornecido uma SQL, usa a ultima gerada pela class clausulas. Aqui vai um exemplo de uso:
Então, é isso. Essas classes são muito úteis para mim e facilitam muito meu trabalho. Espero que gostem.
Até a próxima.
Alfred R. Baudisch
Exemplo:
<?php class mysql_db extends clausulas_sql { // ... código acima function query($query = false) { if (!$query) { $query = $this->clausula_sql; } mysql_query($query) } // ... código abaixo } ?>
Então, a classe clausulas_sql, contém a variável clausula_sql onde são armazenadas as últimas cláusulas geradas. E na hora de chamar a função query, caso não seja fornecido uma SQL, usa a ultima gerada pela class clausulas. Aqui vai um exemplo de uso:
<?php // Insere arquivo da classe de banco de dados. Essa classe extende a classe clausulas_sql require "bancodedados.class.php"; // Cria a classe $sql = new mysql_db; // Quero inserir novos dados na tabela PRODUTOS $campos = array("nome", "valor", "estoque"); $valores = array("Jaqueta de Couro", 240, 50); // Gera a SQL INSERT $sql->gera_insert("produtos", $campos, $valores); // Essa função da classe, é a mysql_query. Não é necessário fornecer um argumento, pois será usada a cláusula gerada na linha anterior $result = $sql->query(); ?>
Então, é isso. Essas classes são muito úteis para mim e facilitam muito meu trabalho. Espero que gostem.
Até a próxima.
Alfred R. Baudisch
Facilita o trabalho de qualquer programador. É a prova concreta de que Programar Orientado a objetos é essencial nos dias atuais.
22/09/2005 12:30am
(~19 anos atrás)
Olha, acho que so esta ficando mais facil de haver bugs nesse script, por que caso vc tenha que modificar alguma coisa vai ter que passar revisando o seu código, e acho que está mais vulnerável a bugs.
05/09/2005 3:38pm
(~19 anos atrás)
Em tempo: use SQL normal mesmo separado em uma segunda classe. DAO. Só tome cuidado com o anemic domaim (ambos patterns Martin Fowler).
02/09/2005 8:12am
(~19 anos atrás)
Não vejo como isso pode ser mais prático.
Você está apenas "quebrando" o SQL e com isso inserindo possíveis bugs.
Muito mais prático seria, se todos programassem OO, criar um framework para persistência de objetos.
Utilize reflexão para obter os atributos do objeto e na sequência crie comandos sql *realmente* dinâmicos. Algo que o ezpdo faz de forma bem porquinha (performance baixa).
Desculpa se fui rude. Criei um user, verifiquei o meu e-mail, escrevi... enfim, *tentei* colaborar. Só falei isso com o intuito de mudar um pouco a visão de que *tudo* escrito com php tem "bad smell".
Nota: 10 pela dediação, 0 para o código/idéia.
Você está apenas "quebrando" o SQL e com isso inserindo possíveis bugs.
Muito mais prático seria, se todos programassem OO, criar um framework para persistência de objetos.
Utilize reflexão para obter os atributos do objeto e na sequência crie comandos sql *realmente* dinâmicos. Algo que o ezpdo faz de forma bem porquinha (performance baixa).
Desculpa se fui rude. Criei um user, verifiquei o meu e-mail, escrevi... enfim, *tentei* colaborar. Só falei isso com o intuito de mudar um pouco a visão de que *tudo* escrito com php tem "bad smell".
Nota: 10 pela dediação, 0 para o código/idéia.
02/09/2005 8:09am
(~19 anos atrás)
estou ainda só começando mas estou gostando da franquesa dessa comunidade....valeu mesmo
01/09/2005 5:44pm
(~19 anos atrás)
mto bom seu artigo.. ajuda mto.. queria apenas coloca um comentario, é q ta faltando um ; depois de
mysql_query($query);
mysql_query($query);
31/08/2005 10:08pm
(~19 anos atrás)
Eu achei interessante seu artigo.
Outra maneira de fazer isso, que é a maneira que eu uso, é que para cada tabela do banco eu tenho uma classe que a representa. esta classe é filha de uma classe que implementa os metodos montarInclusao() e montarAlteracao().
Estes métodos montam o comando SQL de acordo com os atributos que tiveram algum valor atribuido pelos métodos set referentes a cada um deles. Por exemplo, na classe eu tenho um atributo nome, entao eu tenho um método setNome() e getNome().
o Set eu seto o valor e o get eu obtenho o valor de determinado atributo. Com isso eu verifico quais atributos tem valor e monto o comando.
É isso.
um abraço a todos.
Outra maneira de fazer isso, que é a maneira que eu uso, é que para cada tabela do banco eu tenho uma classe que a representa. esta classe é filha de uma classe que implementa os metodos montarInclusao() e montarAlteracao().
Estes métodos montam o comando SQL de acordo com os atributos que tiveram algum valor atribuido pelos métodos set referentes a cada um deles. Por exemplo, na classe eu tenho um atributo nome, entao eu tenho um método setNome() e getNome().
o Set eu seto o valor e o get eu obtenho o valor de determinado atributo. Com isso eu verifico quais atributos tem valor e monto o comando.
É isso.
um abraço a todos.
31/08/2005 3:50pm
(~19 anos atrás)
...é isso aí, meu caro!!!
gostei da idéia. Eu ainda não havia me despertado para isso.
realmente não sei se vou usar devido a outra opções interessantes relatadas nos comentários.
... mas espere um pouco, não ache isso ruim e nem que estou menospresando seu trabalho. Através dele eu aprendi algo contigo e, através dos comentários, aprendi mais outras coisas.
por fim, não sei como vc lidou com essas críticas da galera toda, porém é sempre bom ter em mente que essas 'rejeições' foram para o trabalho e não para vc. ENCARE isso como um processo de engrandecimento: a gente se expõe mostrando o que sabemos e a comunidade colabora.
viva longa à comunidade com seus eternos colaboradores!!!