搜索多列中的多个项目

时间:2011-01-27 23:12:03

标签: php sql mysql search

我在表单中有6个选择项。我想在MYSQL DB中搜索那些6。如果我只使用一个,我可以检索结果,如:

$result = mysql_query("SELECT * FROM wsinmuebles WHERE Property_Type LIKE '%{$_POST['Property_Type']}%'");

但是当我尝试更多时,我没有结果!

$result = mysql_query("SELECT * FROM wsinmuebles WHERE 
Property_Type LIKE '%{$_POST['Property_Type']}%' AND 
Estado LIKE '%{$_POST['Estado']}%' AND 
Ciudad LIKE '%{$_POST['Ciudad']}%' AND 
Urbanizacion LIKE '%{$_POST['Urbanizacion']}%' AND 
Operacion LIKE '%{$_POST['Operacion']}%' AND 
Precio_bsf LIKE '%{$_POST['Precio_bsf']}%'");

这来自POST方法的表单。

我需要的是在MYSQL DB中查找Property_Type,Estado,Ciudad,Urbanizacion,Operacion和Precio_bsf变量,并仅接收与所有这些值匹配的结果。

3 个答案:

答案 0 :(得分:1)

不要使用和使用或者在条件之间,毕竟你应该知道连接字符串和执行查询是可能的SQL注入,也就是说,当我结束你的查询并执行给定的动作时,例如“'并且1 = 1;删除wsinmuebles“如果这是我的serach查询,您将丢失所有数据。

  $result = mysql_query("select * from tbl1 where Name='".mysql_escape_string ($_POST["value"]."'" );

答案 1 :(得分:1)

首先,使用mysql_real_escape_string(Link)转义post值以避免任何SQL注入攻击,并且还会出现具有'字符的数据。

第二个回显查询并对数据库运行它并检查表数据以查看是否 查询确实应该返回一些值,或者在包含其余条件时可能没有匹配项,因为您提到您希望结果与所有这些值匹配。

答案 2 :(得分:0)

如果某个字段,例如Urbanizacion为null,则您的查询不会返回它。

Urbanizacion LIKE '%%'   =>   FALSE when Urbanizacion is Null

您将需要处理Null。我还强烈建议您使用mysql_real_escape_string

保护SQL注入代码
$result = mysql_query("
    SELECT * FROM wsinmuebles WHERE 
    IFNULL(Property_Type,'') LIKE '" . mysql_real_escape_string($_POST['Property_Type']) ."' AND 
    IFNULL(Estado,'') LIKE '" . mysql_real_escape_string($_POST['Estado']). "' AND 
    IFNULL(Ciudad,'') LIKE '" . mysql_real_escape_string($_POST['Ciudad']) ."' AND 
    IFNULL(Urbanizacion,'') LIKE '" . mysql_real_escape_string($_POST['Urbanizacion']) ."' AND 
    IFNULL(Operacion,'') LIKE '" . mysql_real_escape_string($_POST['Operacion']) ."' AND 
    IFNULL(Precio_bsf,'') LIKE '" . mysql_real_escape_string($_POST['Precio_bsf']) ."'");