我需要创建一个搜索引擎,用户可以按名称,年份,成员,年份(文本字段)进行搜索
搜索将与任何一个字段 要么 搜索将与所有领域 要么 搜索将包含多个字段 - 如何只使用一个查询? 现在我的代码是
$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']."'";
- 但它不起作用?
答案 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']."'");
检查是否设置了所有字段,如果是,则返回该结果,否则设置任何字段组合。