2012-02-20 61 views
0

我目前编码PHP一个简单的搜索脚本,需要从即用户三个变量: $容量$位置$ RoomType起草SQL搜索查询基于用户输入

容量是jquery validate插件检查输入数字条目所需的字段 - 但是位置RoomType是可选的。

我想现在草拟一个SQL查询,将搜索表房间

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

我该如何编写这个SQL查询?特别是与$容量被要求,$地点/$ RoomType预计留空或填写在用户的判断?

回答

1

你可以在你的SQL查询中使用LIKE ...%,这样即使是空白的,它也会被视为通配符。

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

当然,请记住要逃避投入。

+0

如何检查Capacity变量是否在特定范围内,例如,如果用户键入50,那么表中的条目为100,那么它落入范围内? – methuselah 2012-02-20 19:58:17

+0

在php中,你可以添加'$ capacityA = $ capacity - 50; $ capacityB = $ capacity + 50;'在MySQL中将其更改为'WHERE容量BETWEEN $ capacityA AND $ capacityB' – 2012-02-20 20:34:10

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; 

} 

虽然如今很多框架存在,让你更轻松地做到这一点,不易出错比手动各具特色查询。

+0

我使用Dreamweaver可以推荐任何可以使用的功能吗? – methuselah 2012-02-20 19:58:43

0

$查询= SELECT * FROM表,其中容量= $容量

如果(isset($位置)& & $位置!= '')$查询=和位置LIKE '%$位置%'

如果(isset($ RoomType)& & $ RoomType!= '')$查询=和RoomType LIKE '%$ RoomType%'

利用LIKE或=运算符在查询是高达你。

+0

'if(isset($ Location)&& $ Location!='')'等于'if(!empty($ location))' – 2012-02-20 21:06:23

0

依赖于它是如何复杂(或不???)

但基本上

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

或类似。

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