Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, bom dia.
Há alguns dias estava com uma dúvida de como executar vários blocos sql no php, isto foi solucionado.
>
Implementei desta maneira a ideia de vocês e funcionou legal.
$comando = "SET @ddatai := str_to_date('01/05/2011', '%d/%m/%Y');
SET @ddataf := str_to_date('31/12/2011', '%d/%m/%Y');
SELECT * FROM CA_TESTE_RET_EFIC B
WHERE
AND date_format( B.DATA_CADASTRO, concat('01/%m/', extract(Year from SYSDATE())) )
between date_format( @ddatai , concat('01/%m/', extract(Year from SYSDATE())))
AND date_format( @ddataf , concat('01/%m/', extract(Year from SYSDATE())))";
$comandos = explode(";",$comando);
foreach($comandos as $sql){
$rs_teste = @mysql_query($sql,$con_teste);
}
Mas agora estou com um problema ao executar quando a váriavel é uma string. É estranho, façam o teste ai, somente foi alterado o tipo de variável. Vejam um exemplo.
$comando = "SET @variavel := '61C019';
select * from CA_ANALISIS_RES where LOTE like @variavel";
$comandos = explode(";",$comando);
foreach($comandos as $sql){
$rs_teste = @mysql_query($sql,$con_teste);
}
Eu simplesmente atribui um valor string para a @variavel. Fiz alguns testes e funcionou normal.
//Isto retorna sem erro o valor da variável.
$comando = "SET @variavel := '61C019';
select @variavel";
//Isto retorna sem erro todo os resultados
$comando = "select * from CA_ANALISIS_RES where LOTE like '61C019'";
Alguém pode me ajudar? Obrigado pessoal.
>
Troque
$rs_teste = @mysql_query($sql,$con_teste);
Por
$rs_teste = mysql_query($sql,$con_teste) or die( mysql_error( ) );
Legal Andrey, agora deu pra ver o erro.
Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'like'
Mas que erro é esse ?
Nunca vi esse erro .. o pessoal fala que isso é problema do MySQL .. dê uma olhada
Caramba :/ ... O mais interessante é quando eu testo pelo HeidiSQL o script funciona
SET @variavel := '61C019';
select * from CA_ANALISIS_RES where LOTE like @variavel
Mas pelo php não ...
Estranho mesmo, vou dar uma pesquisada aqui, qualquer coisa que eu achar relacionado, eu te falo ... também uso o HeidiSQL, um programa bem bacana, mas assim, não entendi o uso dessa sua variável aí.
^_^
Andrey, obrigado pela atenção brother. consegui resolver o problema. O que acontece é que a variável estava sendo criada na hora com a COLLATION errada.
Ai achei um jeito de criala com a mesma COLLATION usada na tabela. Ficou assim:
SET @variavel := '61C019' COLLATE latin1_general_ci;
select * from CA_ANALISIS_RES where lote like @variavel
O HeidiSQL é muito bom mesmo né !? Nele funciona sem precisar alterar a collation.
Agora em relação ao script, é estranho entender o porque estou criando esta variável somente para armazenar o valor e depois usar no WHERE né ? Eu imagino ... Mas é que eu resumi o meu sql ao máximo e deixei somente onde estava o erro para melhor entendimento. Eu preciso criar esta parte de variáveis no comando sql, porque estou fazendo a leitura de um SQL criado por um administrador do sistema, o SQL para gerar um relatório, e nessas variáveis serão inseridos os parâmetros para filtragem. Aí ele vai usar essas variáveis no relatorio. Se eu fizesse sem usar variável, se precisa-se inserir o mesmo parâmetro mais de uma vez no SQL o cliente teria que inserir mais de uma vez o mesmo valor. Não sei se deu pra entender mas é isso.
Valeu Andrey brother pela atenção. Agora funcionou, e solução tah ai.
Troque
$rs_teste = @mysql_query($sql,$con_teste);
Por
$rs_teste = mysql_query($sql,$con_teste) or die( mysql_error( ) );