Seguinte, tenho um script aqui que filtra uma pesquisa em banco de dados, nada muito impossivel, mas estou tendo problemas na execução da query que é montada pelo sistema.
Se eu pegar essa query e executar manualmente no banco de dados, os resultados são retornados normalmente, se eu colar a query diretamente na função que executa a query no php, também funciona, mas se eu deixar o php executar sozinho, não retorna resultado, apenas bool(true).
O código da geração de query (ainda vou trabalahr a parte de segurança dele):
<?php
$db = $GLOBALS['db'];
$time_start = microtime_float();
if ($_POST['email'] == -1 or $_POST['mala'] == -1) {
echo "ISSO NON ECZISTE!";
} else {
$tipos_selecionar = $_POST['permitir_tipo'];
$tipos_nao_selecionar = $_POST['negar_tipo'];
$bancos_selecionar = $_POST['permitir_banco'];
$bancos_nao_selecionar = $_POST['negar_banco'];
$query['geral'] = " SELECT * FROM contato INNER JOIN contatoXbanco AS cxb ON cxb.id_contato = contato.idContato INNER JOIN contatoXtipo AS cxt ON cxt.id_contato = contato.idContato";
$query['tipos_add'] = "";
$query['tipos_nao_add'] = "";
$query['bancos_add'] = "";
$query['bancos_nao_add'] = "";
if (!is_null($tipos_selecionar)) {
$query['tipos_add'] = concatena($tipos_selecionar);
}
if (!is_null($tipos_nao_selecionar)) {
$query['tipos_nao_add'] = concatena($tipos_nao_selecionar);
}
if (!is_null($bancos_selecionar)) {
$query['bancos_add'] = concatena($bancos_selecionar);
}
if (!is_null($bancos_nao_selecionar)) {
$query['bancos_nao_add'] = concatena($bancos_nao_selecionar);
}
$query['where'] = "";
if ($query['tipos_add'] != "") {
$query['where'][0] .= '( cxt.id_tipo IN (' . $query['tipos_add'] . ' ) )';
}
if ($query['tipos_nao_add'] != "") {
$query['where'][1] .= '( cxt.id_tipo NOT IN( ' . $query['tipos_nao_add'] . ' ) )';
}
if ($query['bancos_add'] != "") {
$query['where'][2] .= '( cxb.id_banco IN( ' . $query['bancos_add'] . ' ) )';
}
if ($query['bancos_nao_add']!= "") {
$query['where'][3] .= '( cxb.id_banco NOT IN( ' . $query['bancos_nao_add'] . ' ) )';
}
$where_declarado = false;
$where = "";
$preenchidos = 0;
for ($i = 0; $i <= 3; $i++) {
if ($query['where'][$i]!="") {
if (!$where_declarado)
$where .= 'WHERE ';
if ($preenchidos == 0)
$where .= $query['where'][$i];
else
$where .= ' AND ' . $query['where'][$i];
$preenchidos++;
$where_declarado = true;
}
}
//var_dump($query);
$final = $query['geral'] . ' ' . $where.';';
//$final = str_replace('\n', '', $final);
echo "<pre>".$final."<pre>";
$db->mysqlStart(1);
$res = $db->query($final, 1);
$db->mysqlEnd(1);
$_SESSION['novo_envio'] = $res;
var_dump($res);
?>
<table>
<tr>
<td>Confirmar</td>
<td>Nome</td>
<td>Email</td>
</tr>
<?php
for($i=0;$i<=count($res)-1;$i++){
?>
<tr>
<td><input type="checkbox" value="<?php echo $res[$i]['idContato']; ?>" checked/></td>
<td><?php echo $res[$i]['nome']; ?></td>
<td><?php echo $res[$i]['email']; ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
function concatena($var) {
$aux = NULL;
for ($i = 0; $i <= count($var) - 1; $i++) {
if(!is_null($aux))
$aux = $aux.','.$var[$i];
else
$aux = $var[$i];
}
return $aux;
}
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>
<?php
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Gerado em ".number_format($time, 2, '.', '')."s <br />";
?>
Estou suspeitando de existir algum \r\n atrapalhando a execução (já enfrentei esse tipo de problema), mas não consegui localizar nada. Minha classe de banco de dados está ok, ja fiz vários testes e nada aconteceu de errado e como já disse, a query está funcionando. Alguma luz?
=========================================================================================
Edit:
Consegui resolver =]~
Se servir de ajuda para alguem, bastou colocar um trim() na query e funcionou perfeitamente
Edição feita por: dddidan, 18/09/2012, 08:48.










