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.
O Cleitinho não é fácil!
Há um mês
Nenhum comentário:
Postar um comentário