2012-02-20 60 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,'') = '')) 

或類似。

如果您未使用參數化查詢,請將@ ....替換爲轉義輸入。