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.