根据用户输入起草SQL搜索查询

时间:2012-02-20 18:08:07

标签: php mysql

我目前正在用PHP编写一个简单的搜索脚本,需要用户提供三个变量: $ Capacity $ Location $ RoomType

容量是jquery validate插件检查输入数字输入的必填字段 - 但位置 RoomType 是可选的。

我正在尝试草拟一个SQL查询,该查询将搜索表 rooms

表格中有三列也称为容量位置 RoomType ,我想使用变量进行搜索。

我该如何编写这个SQL查询?特别是需要 $ Capacity $ Location / $ RoomType 预计会留空或由用户自行决定填写?

4 个答案:

答案 0 :(得分:1)

您可以在SQL查询中使用LIKE ...%,这样即使空白,也可以将其视为通配符。

$q = 'SELECT * FROM foo WHERE capacity = "'.$capacity.'" AND location LIKE "'.$location.'%" AND roomtype LIKE "'.$roomtype.'%"';

当然,请记住逃避输入。

答案 1 :(得分:0)

这样的事情应该有效:

function BuildSearchQuery($Capacity, $Location, $RoomType)
{

    $where = array();

    if (!empty($Capacity))
    {
        $where[] = "Capacity = '" . mysql_real_escape_string($Capacity) . "'";
    }
    if (!empty($Location))
    {
        $where[] = "Location = '" . mysql_real_escape_string($Location) . "'";
    }
    if (!empty($RoomType))
    {
        $where[] = "RoomType = '" . mysql_real_escape_string($RoomType) . "'";
    }

    if (empty($where))
    {
        return false;
    }

    $sql = "select * from `table` where ";
    $sql += implode(" AND ", $where);

    return $sql;

}

虽然现在有很多框架可以让你比手工制作查询更容易,更不容易出错。

答案 2 :(得分:0)

$ query = select * from table其中Capacity = $ Capacity

if(isset($ Location)&& $ Location!='')$ query。= and Location LIKE'%$ location%'

if(isset($ RoomType)&& $ RoomType!='')$ query。=和RoomType LIKE'%$ RoomType%'

在查询中使用LIKE或=运算符取决于您。

答案 3 :(得分:0)

取决于它的复杂程度(和不是......)

但基本上

Select ... From Rooms Where Capacity = @Capacity 
and ((Location = @Location) Or (IsNull(@Location,'') = '')) 
and ((RoomType = @RoomType) or (IsNull(@RoomType,'') = ''))

或者其他一些。

如果您没有使用参数化查询,则将@ ....替换为转义输入。