PHP / MYSQL高级搜索脚本。怎么样?

时间:2011-02-16 14:10:43

标签: php mysql

我需要一些指导,为我正在处理的网站制作高级搜索脚本。

我已经知道如何在数据库中搜索简单查询。我现在遇到的问题是如何在使用多个选择框时进行搜索。例如:

enter image description here

这只是一个包含不同搜索选项的简单表单。问题是:

访问者可以选择搜索某个国家/地区或城市,甚至可以选择所有三个选项。

如何在PHP脚本中捕获它?我是否必须检查是否已选择某个城市,并根据该查询启动查询?但如果我这样做,我将不得不根据每个选择选项进行不同的查询。

在伪代码中它会是这样的:(我想)

如果country和city以及其他内容不为null,请启动查询以搜索数据库中的所有三个表。

但是当选择这个国家时该怎么办?或者只是城市?

有一种简单的方法可以实现这一目标吗?

提前致谢。

3 个答案:

答案 0 :(得分:6)

我喜欢使用数组来加入条件,所以我不必担心前导或尾随AND。

$conditions = array();
if ($formCondition1) {
  $conditions[] = 'state = "'.$somevalue.'"';
}
if ($formCondition2) {
  $conditions[] = 'country = "'.$somevalue.'"';
}
...
if ($formConditionN) {
  $conditions[] = 'N = "'.$somevalue.'"';
}

//最后将条件连接在一起,最简单的情况是使用AND(如果你需要添加OR,听起来你没有,那么这段代码会更复杂一些)

$sqlStatement = 'SELECT field1, field2 FROM tableABC WHERE '.implode(' AND ', $conditions);

编辑:不要忘记逃避输入以防止注入攻击,当然还要测试以确保在运行查询之前至少有1个条件。 编辑:lol jswolf,我认为非常相似:))

答案 1 :(得分:5)

我创建一个$where数组,根据需要添加条件,然后{'1}}以'AND'作为粘合剂。如下所示:

implode

答案 2 :(得分:4)

我会尝试类似的事情:

$qry = "SELECT * FROM table WHERE ";
if ($country != '') {
    $qry .= "country='".mysql_real_escape_string($country)."' AND "
}
if ($city != '') {
    $qry .= "city='".mysql_real_escape_string($city)."' AND "
}
$qry .= '1';
$res = mysql_query($qry);

根据设置的内容构建查询。注意查询字符串末尾的“1”始终为true。如果$ country和$ city都为空,则需要遵循“WHERE”,如果不是,则需要跟随最后一个“AND”。