LIKE does not work together with BETWEEN

1

Something wrong with this query?

All data is displayed without any filtering. But when I shoot the LIKEs it works or if I take the BETWEEN and leave the LIKEs it works. One only works without the other. Why?

$produto = mysql_query("SELECT idProduto, tipoProduto, imagemProduto, marcaProduto, modeloProduto, conservacaoProduto, anoProduto, kmProduto, corProduto, portasProduto, transmissaoProduto, combustivelProduto, valorProduto, destaqueProduto, visivelProduto, opcionaisProduto, observacoesProduto, 'datacriacaoProduto', 'dataalteracaoProduto', usuariocriacaoProduto, usuarioalteracaoProduto FROM produto WHERE 
                                         (tipoProduto LIKE '%".$tipo."%') OR 
                                         (marcaProduto LIKE '%".$marca."%') OR  
                                         (modeloProduto LIKE '%".$modelo."%') OR  
                                         (conservacaoProduto LIKE '%".$conservacao."%') OR 
                                         (anoProduto BETWEEN '".$minano."' AND '".$maxano."') OR 
                                         (valorProduto BETWEEN '".$minpreco."' AND '".$maxpreco."') OR
                                         (kmProduto BETWEEN '".$minkm."' AND '".$maxkm."')")
    
asked by anonymous 02.08.2016 / 23:11

2 answers

2

You have a structural problem in your query. When the value of any "like" comes empty it brings all the options, no matter if AND or OR. For this will result in a LIKE '%%' that literally brings everything, does not filter anything. Consider setting up your query dynamically only with the filters that will be used. For example, by throwing the query into a variable and proceeding:

if(trim(tipoProduto) != ''){
   $query .= 'AND (tipoProduto LIKE '%".$tipo."%') ';
}
    
04.08.2016 / 04:50
0

After much searching I came up with the solution below. I think to transform the variables just in POST, to take the simple quotation marks of BETWEENs and to put the form with enctype multipart, it finally worked. I think that was it:

    
04.08.2016 / 19:46