mysql和or一起查询

时间:2010-07-13 11:33:07

标签: php mysql

我需要创建一个搜索引擎,用户可以按名称,年份,成员,年份(文本字段)进行搜索

搜索将与任何一个字段 要么 搜索将与所有领域 要么 搜索将包含多个字段 - 如何只使用一个查询? 现在我的代码是

$query="select * from fsb_profile where profile_name = '".$_REQUEST['name']."' and 
    profile_member= '".$_REQUEST['type']."' and profile_year= '".$_REQUEST['year']."'  
    and profile_course='".$_REQUEST['course']."' or profile_name = '".$_REQUEST['name']."'  
    or profile_member= '".$_REQUEST['type']."' or profile_year= '".$_REQUEST['year']."'  
    or profile_course='".$_REQUEST['course']."'";

- 但它不起作用?

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

SELECT ...
FROM ...
WHERE (profile_name = '$profile_name' OR '$profile_name' = '')
  AND (profile_member = '$profile_member' OR '$profile_member' = '')
  AND ...

或者,您可以根据您拥有的字段动态构建查询。

无论哪种方式,您都应该避免将数据直接从用户输入放入查询中,而无需先将其转义。查看mysql_real_escape_string或使用绑定参数。

答案 1 :(得分:0)

这应该可以解决问题:

$query="select * from fsb_profile where (profile_name = '".$_REQUEST['name']."' and profile_member= '".$_REQUEST['type']."' and profile_year= '".$_REQUEST['year']."' and profile_course='".$_REQUEST['course']."') or (profile_name = '".$_REQUEST['name']."' or profile_member= '".$_REQUEST['type']."' or profile_year= '".$_REQUEST['year']."' or profile_course='".$_REQUEST['course']."'");

检查是否设置了所有字段,如果是,则返回该结果,否则设置任何字段组合。