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





PHP: Como corrigir o erro de date timezone?

17 11 2010

Estava eu programando tranquilamento quando me deparei com o erro de date.timezone. Caramba, o que é isso? Bom, depois de pesquisar um pouco em alguns sites descobri que o PHP contém a configuração de tempo e local, e esta deve ser definida no arquivo de configurações do PHP: php.ini. Legal!

Pra resolver isso basta tirar o comentário da seguinte linha, que no meu caso estava assim:

;date.timezone =

Retirando o comentário e definindo o local, ficou assim:

date.timezone = "America/Sao_Paulo"

Perfect! Nada mais de erros e warnings!





Fatal error na função curl_init! Como habilitar o curl no php xampp?

27 09 2010

Estava eu desenvolvendo uma aplicação que se utiliza da classe curL, porém tive a seguinte mensagem:

Fatal error: Call to undefined function curl_init()

Legal, e agora? Preciso instalar o curl?

A resposta é não!

Basta habilitar no php.ini!

Vamos lá! Retire o ‘;’ da seguinte linha:

;extension=php_curl.dll

Blz, agora reinicie o xampp/Apache!

Pronto! Perfect!





PROGRAMAÇÃO: Operadores Relacionais – Indênticou ou Não Idêntico com PHP

24 07 2010

Sabemos que a Linguagem de Programação PHP não tem a definição de tipagem, diferente da linguagem JAVA que você pode definir todos os tipos de variáveis. Porém o PHP permite a validação através dos Operadores Relacionais, onde você consegue saber se o conteúdo das variáveis são idênticas (igual em conteúdo e em tipo) ou se não são idênticas.

Vamos para um exemplo prático de como realizar essa validação:


$numerico = 1;
$texto = '1';

$comparadorPadrao = $texto == $numerico;

if($comparadorPadrao) echo 'As variáveis são iguais.';
else echo 'As variáveis não são iguais';

Legal! Neste exemplo qual o retorno? Infelizmente é “As variáveis são iguais.”
Podemos chamar esse exemplo de uma “Comparação Fraca”.

Agora vamos para um outro exemplo:


$comparadorIdentico = $texto === $numerico;

if($comparadorIdentico) echo 'As variáveis são iguais';
else echo 'As variáveis <b>não</b> são iguais';

Opa! Agora temos um resultado diferente: “As variáveis não são iguais.”.

Perfeito. A inclusão dos Operadores Relacionais “===” torna a validação do PHP mais correta e completa!

E pra fechar, um exemplo de como realizar a mesma validação utilizando o Operador Relacional Não Idêntico:


$comparadorNaoIdentico = $texto !== $numerico;

if($comparadorNaoIdentico) echo 'As variáveis NÃO são iguais';
else echo 'As variáveis <b>são</b> iguais.';

Resultado:

"As variáveis NÃO são iguais."

É isso!





PROGRAMAÇÃO: Como contar palavras e contar letras com a linguagem de programação PHP?

24 07 2010

Essa semana enfrentei um dilema, precisei quebrar a frase em palavras nos espaços em branco. Até aí ta fácil, porém depois precisei contar as letras de cada palavra e somar até dar o número determinado. Quando chegar nesse número preciso quebrar a linha. Legal né?! ;-()

Bom, pra resolver essas questões, voltei a dar uma estudada no básico do PHP. Dependendo do que você precisa fazer, você tem funções prontas específicas. Vamos às situações:

1) Quebrar a frase nos espaços em branco

Fácil! Utilize a função EXPLODE  do PHP.
Definição do site php.net

array explode( string $delimiter , string $string [, int $limit> ] )

Vamos pegar meu nome completo como exemplo:

$stringNome = "Dilberto Gabriel Rosa";
$nomeQuebrado = explode(" ", $stringNome);
echo $nomeQuebrado[0]; // Dilberto
echo $nomeQuebrado[1]; // Gabriel
echo $nomeQuebrado[0]; // Dilberto

2) Contar o número de palavras na frase

Agora que já quebramos a frase, temos um array onde cada índice do array contém uma palavra. Pra contar o número de palavras basta contar quantos elementos temos no array gerado.

echo 'Total de palavras: '.count($nomeQuebrado);

3) Contar o número de letras enquanto mostra as palavras

Bom, aqui a parte mais trabalhosa, onde teremos que ler cada índice do array, e para cada índice do array lido temos que ler letra por letra e incrementar nosso contador. Desta forma, ao final do último índice do array temos o total de letras de toda a string inicial.

Vamos ao código:

//Criando a variável que vai contar letra por letra
$contaLetra = 0;

//Loop que vai olhar palavra por palavra do array
foreach($nomeQuebrado as $nq) {
    //Loop que vai olhar em cada palavra, letra por letra do array e incrementar o contador
	for($i=0;$i<strlen($nq);$i++) {
	   <code>echo '<br>'.$nq[$i];</code>
	   <code>$contaLetra++;</code>		
	}

	//Quebrando linha depois da palavra
	echo '<br>';

}

//Mostrando o total de letras da nossa frase
echo '<br>Total de Letras: '.$contaLetra;

4) Quebrar linha quando passar de 10 letras

Ótimo! Agora ficou fácil, se você precisar quebrar linha no momento em que passar 10 letras por exemplo, basta incluir uma condicional validando dentro do primeiro loop, desta forma você vai quebrar linha ao final da palavra, e não no meio dela, o que é mais correto.
IMPORTANTE: não esqueça que quando você quebrar a linha deve zerar o contador para que comece validar as próximas 10 letras. E finalmente, é necessário criar um novo contador se quiser saber quantas letras existem na frase inteira.

Confira o código completo:

//String definida
$stringNome = 'Dilberto Gabriel Rosa Teste Teste2 Teste3';

//Gerando array com todos os nomes
$nomeQuebrado = explode(' ',$stringNome);

//Criando a variável que vai contar letra por letra
$contaLetra = 0;

//Variável que vai armazenar o total geral de letras
$ContaLetrasTotal = 0;

//Loop que vai olhar palavra por palavra do array
foreach($nomeQuebrado as $nq) {
	
	//Validando se chegou ao número máximo de letras para quebrar a linha
	if($contaLetra > 10) {
		echo '<br>';
		$contaLetra = 0;
	}
	//Loop que vai olhar em cada palavra, letra por letra do array e incrementar o contador
	for($i=0;$i<strlen($nq);$i++) {
		echo $nq[$i];
		$contaLetra++;
		$contaLetraTotal++;		
	}
	
	//espaço entre as palavras e incrementando contador
	echo ' ';
	$contaLetra++;
	$contaLetraTotal++;		

}

//Mostrando o total de letras da nossa frase
echo '<br>Total de Letras: '.--$contaLetraTotal;

Bom final de Semana!





Como utilizar jQuery no WordPress

2 06 2010

O wordpress traz inúmeros recursos, mas, se você quer utilizar os teus conhecimentos em jQuery, também pode aplicar de forma bem fácil.

Na seção Head do arquivo header.php inclua a seguinte linha:

<?php wp_enqueue_script(“jquery”); ?>

Pronto! Agora é só usar o jQuery normalmente!

Bom feriado!





Programadores Matando Dragões e salvando a princesa

12 03 2010

Como os programadores matam os dragões…

Java
Chega, encontra o dragão. Desenvolve um framework para aniquilamento de dragões em múltiplas camadas.
Escreve vários artigos sobre o framework, mas não mata o dragão.

.NET
Chega, olha a idéia do Javanês e a copia, tenta matar o dragão, mas é comido pelo réptil.

ASP
Os componentes necessários para levantar a espada são proprietários e caros. Outros tantos componentes proprietários para achar a localização do dragão, e mais outros tantos a localização da princesa. Chama então seu amigo programador de PHP.

C
Chega, olha para o dragão com olhar de desprezo, puxa seu canivete, degola o dragão. Encontra a princesa, mas a ignora para ver os últimos checkins no cvs do
kernel do linux.

C++
Cria um canivete básico e vai juntando funcionalidades até ter uma espada complexa que apenas ele consegue entender … Mata o dragão, mas trava no meio da ponte por causa dos memory leaks.

COBOL
Chega, olha o dragão, pensa que tá velho demais para conseguir matar um bicho daquele tamanho e pegar a princesa e, então, vai embora de volta ao seu
mundinho.

Pascal
Se prepara durante 10 anos para criar um sistema de aniquilamento de dragão… Chegando lá descobre que o programa só aceita lagartixas como entrada.

VB
Monta uma arma de destruição de dragões a partir de vários componentes, parte pro pau pra cima do dragão e, na hora H, descobre que a espada só funciona
durante noites chuvosas…

PL/SQL
Coleta dados de outros matadores de dragão, cria tabelas com N relacionamentos de complexidade ternária, dados em 3 dimensões, OLAP, demora 15 anos para processar a informação. Enquanto isso a princesa virou lésbica.

PHP
Pesquisa bancos de scripts e acha as classes de construção de espada, manuseio da espada, localização da princesa e dragão. Remenda tudo e coloca umas firúlas próprias.
Mata o dragão e casa com a princesa. Como tudo foi feito com gambiarras, o dragão um dia vai ressuscitar e comer os dois.

Ruby
Chega com uma p*t* fama, falando que é o melhor faz tudo, quando vai enfrentar o dragão mostra um videozinho dele matando um dragão … O dragão come ele de tédio.

Smalltalk
Chega, analisa o dragão e a princesa, vira as costas e vai embora, pois eles são muito inferiores.

ASSEMBLY
Acha que está fazendo o mais certo e enxuto, porém troca um A por D, mata a princesa e transa com o dragão.

Shell
Cria uma arma poderosa para matar os dragões, mas na hora H, não se lembra como usá-la.

Shell (2)
O cara chega no dragão com um script de 2 linhas que mata, corta, stripa, pica em pedacinhos e empalha o bicho, mas na hora que ele roda, o script aumenta,
engorda, enfurece e coloca álcool no fogo do dragão.

Fortran
Chega desenvolve uma solução com 45000 linhas de código, mata o dragão vai ao encontro da princesa …
mas esta o chama de tiuzinho e sai correndo atrás do programador java que era elegante e ficou rico.

FOX PRO
Desenvolve um sistema para matar o dragão, por fora é bonitinho e funciona, mas por dentro está tudo remendado. Quando ele vai executar o aniquilador de
dragões lembra que esqueceu de indexar os DBF’s.

CLIPPER
Monta uma rotina que carrega um array de codeblocks para insultar o dragão, cantar a princesa, carregar a espada para memória, moer o dragão, limpar a sujeira, lascar leite condensado com morangos na princesa gostosa, transar com a princesa, tomar banho, ligar o carro, colocar gasolina e voltar pra casa. Na hora de
rodar recebe um “Bound Error: Array Access” e o dragão come ele com farinha.

ANALISTA DE PROCESSOS
Chega ao dragão com duas toneladas de documentação desenvolvida sobre o processo de se matar um dragão genérico, desenvolve um fluxograma super complexo para libertar a princesa e se casar com ela, convence o dragão que aquilo vai ser bom pra ele e que não será doloroso. Ao executar o processo ele estima o esforço e o tamanho do estrago que isso vai causar, consegue o aval do papa, do Buda e do Raul Seixas para o plano, e então compra 2 bombas nucleares, 45 canhões, 1 porta aviões, contrata 300 homens armados até os dentes, quando
na verdade necessitaria apenas da espada que estava na sua mão o tempo todo.

Python
Abre uma faquinha do canivete e mata o dragão numa punhalada só.
Mas aí descobre que no canivete tinha armas mais legais ainda, e fica eternamente ressucitando o dragão pra matá-lo de diferentes formas, se esquecendo assim da princesa.





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! ;)





Problema com datetime do MySql e PHP

18 11 2009

Hoje Eu e a Luciane enfrentamos um problema: Realizar um select em um campo datetime do MySql. Parece simples? Mas não foi!

Em nossas consultas sempre realizamos pesquisas no banco de dados com campos do tipo datetime, porém nunca enfrentamos a situação em que o resultado sempre vinha vazio sendo que temos dados em banco. Desta forma começamos a perguntar: Porque o aqua (nossa ferramenta para consultas à banco de dados) não traz o resultado?

Nosso select no aqua era o seguinte:

select * from tabela where campo_data = current_date

Bom, normalmente, para outras consultas esse comando sql funcionaria. Desta vez não foi bem assim.

Dando uma analisada no conteúdo da tabela no banco, identificamos as seguintes datas:

16/11/2009 11:39:00
16/11/2009 10:30:03

Desta forma, podemos identificar que, apesar de serem mesmas datas, o datetime permite gravação de hora, minuto e segundos. Essa foi a primeira pista.

A segundo pergunta foi: Como estão sendo gravados estes dados?

Identificamos que no PHP, na realização do insert em banco de dados, o programador pegou a data atual com o seguinte comando: “now”. Agora temos a segunda pista. O comando “now” do PHP traz a data atual, acompanhada de hora, minuto e segundos! Assim, quando era realizado insert em banco, era gravado a data com a hora atual, porém na busca estavamos utilizando apenas a data. O resultado do SQL era vazio pois a data era a mesma mas a hora não.

Como resolver?

A idéia inicial foi alterar a função PHP de ‘now’ para date(‘Y-m-d’). E deu certo!

Ao utilizar a função “date”, o PHP grava a data no campo, com a hora zerada. Desta forma a consulta sql desconsidera a hora para aquela linha, trazendo o registro. É isso!

Abraço.








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.