0

Criando Cláusulas SQL Dinamicamente

criado por Alfred R. Baudisch em 24/08/2005 12:02am
Como eu uso classes de abstração de banco de dados em meus sites, eu simplesmente extendo essa classe em todas as elas.

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

Comentários:

Mostrando 1 - 10 de 14 comentários
Josue Samuel disse:

...é 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!!!
06/01/2006 5:19am (~16 anos atrás)

Facilita o trabalho de qualquer programador. É a prova concreta de que Programar Orientado a objetos é essencial nos dias atuais.
22/09/2005 12:30am (~16 anos atrás)

bem bacana o artigo
14/09/2005 2:29pm (~16 anos atrás)

Diego Hellas disse:
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 (~16 anos atrás)

Rui disse:
Procure utilizar AR active record.
02/09/2005 10:36am (~16 anos atrás)

Rui disse:
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 (~16 anos atrás)

Rui disse:
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.
02/09/2005 8:09am (~16 anos atrás)

GILSON SOARES disse:
estou ainda só começando mas estou gostando da franquesa dessa comunidade....valeu mesmo
01/09/2005 5:44pm (~16 anos atrás)

mto bom seu artigo.. ajuda mto.. queria apenas coloca um comentario, é q ta faltando um ; depois de

mysql_query($query);
31/08/2005 10:08pm (~16 anos atrás)

Adler Medrado disse:
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.
31/08/2005 3:50pm (~16 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)