PHP – Como executar diversas queryes com PEAR – DB_DataObject dentro de um loop?

26 08 2011

Então pessoal, descobri uma coisa bem legal que resolve um problema que tive diversas vezes.
Preciso instanciar uma classe DAO do DB_DataObject e executar n queryes. Porém isso vai acontecer dentro de um looping que nem sempre eu sei quantas vezes isso vai occorrer. E agora? Solução: Free resources!

Pra entendermos, imagine um looping até 10 mil. Poderia ser até 100 mil, não importa, detro deste for, instanciamos a classe DAO, executamos a query e chamamos o método “free()”! Pronto! Saca só o exemplo do site pear.php.net.

<?php

for ($i = 0; i< 10000; $i++) {
    $person = new DataObjects_Person;
    $person->query(' ... do something ... ');
    $person->free();
}

?> 

Moleza!

Fonte: pear.php.net





PHP – Como debugar uma query no Pear DB DataObject?

19 08 2011

Pessoal, depois de muito tempo debugando o Pear através do arquivo .ini de configuração do banco, apesar do inconveniente de toda a equipe receber um debug na tela e ainda atrapalhar a execução de determinadas requisições JS, resolvi pesquisar um pouco sobre o debug do Pear.

Após ler algumas documentações, identifiquei o método debugLevel, que pode ser utilizado diretamente na instanciação da classe DO.

Vamos à um exemplo, pra ficar bem fácil de identificar:

Imagine que você instanciou a classe DB_DataObject da tabela usuário. Você pode chamar o método de debug da seguinte forma:

$doUSUARIO = new DO_USUARIO();

Até agora temos uma instância do objeto DO_USUARIO da tabela USUARIO.

Agora vamos dizer para o código que queremos um debug da query na tela:

$doUSUARIO->debugLevel(5);

Ótimo! Assim você pode acompanhar o debug da execução do SQL no próprio firebug!

Ainda assim, todo o resto do código que utiliza PEAR no mesmo DB não sobre com debugs indesejáveis! ;)

Claro, ao final do trecho de código que executa a query, no caso um “find” ou um “fetch” por exemplo, você seta o debugLevel para vazio:

$docoordenadas->debugLevel();

Pronto! Agora ficou mais fácil trabalhar com PEAR – DB_DataObject! Abraço!

Fonte: pear.php.net





Existe truncate no PEAR DataObject? Delete existe!

28 11 2009

Dae galera, desta vez vou estar postando uma solução, mas espero que não seja a única. Estive nos últimos dias pesquisando por truncate no Pear Dataobject, porém sem sucesso. Mas, como eu tinha urgência em finalizar um script php, descobri uma maneira de limpar todos os dados da tabela utilizando delete. Resolveu? sim! Mas se estivermos falando de performance, o Truncate do MySql tem algumas vantagens sobre o delete. Se quiser saber mais sobre estas vantagens acesse o post Utilizando TRUNCATE no MySql.

Bom, vamos à minha solução:

Imagine que queremos limpar os dados da tabela cliente:

$doCLIENTE = new DO_CLIENTE;
$doCLIENTE->whereAdd(“COD_CLIENTE IS NOT NULL”);

Até aqui instanciamos o DO e definimos o where. Neste caso o COD_CLIENTE é NOT NULL, assim todos as linhas da tabela obrigatoriamente contém um COD_CLIENTE. Agora vem o segredo do pear para utilizar o delete, com o método whereAdd:

$doCLIENTE->delete(DB_DATAOBJECT_WHEREADD_ONLY);

Isso mesmo, utiliza-se o parâmetro DB_DATAOBJECT_WHEREADD_ONLY. Desta forma o método vai considerar o whereAdd antes de apagar as linhas. Sem este parâmetro o whereAdd é ignorado!

Pronto! Aqui eu finalizei minha implementação. Se alguem conseguir uma solução que tenha a mesma performance do Truncate do MySql deixa a dica ai blz! Abraço! ;)





Utilizando WhereAdd e orderBy com pear DB_DataObject

12 11 2009

Hoje trago uma aplicação simples com Pear Framework utilizando o package DB_DataObject. Vamos focar 2 métodos: whereAdd e OrderBy, que são super utilizados em consultas SQL.

Para quem tiver dúvida e quiser consultar o manual acesse:
DB_DataObject Manual

Neste exemplo, vamos seguir uma idéia bem simples para o fácil entendimento.

Utilizaremos a seguinte tabela, neste caso no DB MySql:

tabela USUARIO

Field		Type		Null	key	Default	Extra
id		int(10)		NO	PRI	(null)	auto_increment
nome		varchar(50)	YES	MUL	(null)
sexo		char(1)		YES		(null)
dt_nascimento	date		YES		(null)

Temos as seguinte necessidades:

1. Precisamos selecionar todos os usuário que nasceram a partir do ano de 1990;
2. Precisamos trazer apenas o usuário cadastrados com sexo Masculino;
3. E pra finalizar queremos trazer os registros por ordem de data de nascimento;

Legal, temos a idéia para o desenvolvimento.
Levando em consideração que você já gerou todas as tuas tabelas para o banco de dados DAO vamos ao código:

//Instanciando a classe DAO
$DAOUsuario = new DO_USUARIO();

//Incluíndo whereAdd
$DAOUsuario->whereAdd(“YEAR(dt_nascimento)>1990″);
$DAOUsuario->whereAdd(“sexo = ‘M’”);

//Incluindo orderBy
$DAOUsuario->orderBy(“dt_nascimento”);

//Executando a query
$DAOUsuario->find;
$result = $DAOUsuario->fetch();

Legal, temos todos os dados na variável $result.

Dúvidas? Estarei á disposição!
Abraço!
Dilberto Rosa





Como realizar Update utilizando Pear DB_DataObject

30 09 2009

Olá pessoal, neste POST estaremos tratando de um assunto interessante relativo ao Pear, que é um framework para reutilização de componentes PHP.

Para quem ainda não utiliza, pode fazer download no site: pear.php.net. Baixe o package DB_DataObject que é focado em banco de dados.

A documentação relativa à este package está no endereço: DB_DataObject Manual

Infelizmente a documentação na maioria dos casos é inglês tendo pouca coisa em português.

Vamos lá!

Inicalmente você deve definir qual é o banco de dados e a tabela onde será realizado o update. Tomamos como exemplo fictício o banco “Empresa” tabela “CLIENTE”. Iremos alterar o campo “nome” do usuário para o usuário “Dilberto Gabriel Rosa”. Porém realizaremos update onde a chave “pkUsuario” é 737.

Os passos são os seguintes:

1) Instanciar a Model da sua tabela
$daoCliente = new DO_CLIENTE();

2) Setar o “where” para realizar o UPDATE

Aqui está o segredo em realizar update utilizando o pacote DB_DataObject do Pear. Ao realizar Update, ele não se utiliza do método whereAdd. Temos que utilizar o método “get” passando o conteúdo da PK (Primary Key) da tabela. Desta forma o sistema vai realizar o update onde a PK seja igual ao valor passado no get.

Confuso? Vamos ao exemplo.

$daoCliente->get(737);

Assim, o pear entende que ele deve fazer update onde o PK seja 737!

3) Setar o campo “nome” do usuário
$daoCliente->nome = “Dilberto Gabriel Rosa”;

Até este ponto estamos apenas setando o conteúdo da propriedade nome do objeto $daoCliente.

4) Realiza o Update
$daoCliente->update();

Agora sim, ele atualiza em banco, conforme o objeto;

Pronto!

Certo, mas você pode perguntar: “E se eu quiser realizar update em que vou me basear em um campo que não seja um campo chave?”

Simples, o método GET já está preparado para isso. Se você olhar a documentação vai ter o seguinte texto:

“Get a result using key, value”.

Significa “Obtém um resultado usando uma chave, valor”. Assim sendo, poderiamos ter utilizado o método get da seguinte forma:

$daoCliente->get(“pkUsuario”,737);

Simples né?

Bom, é isso pessoal. Dúvidas estarei a disposição. Conforme o interesse estarei postando outros artigos relacionados com Pear! Grande Abraço.

Dilberto Rosa








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.