我目前編碼PHP一個簡單的搜索腳本,需要從即用戶三個變量: $容量,$位置和$ RoomType起草SQL搜索查詢基於用戶輸入
容量是jquery validate插件檢查輸入數字條目所需的字段 - 但是位置和RoomType是可選的。
我想現在草擬一個SQL查詢,將搜索表房間。
有三個表中的列也被稱爲容量,位置和RoomType,我想用變量進行搜索。
我該如何編寫這個SQL查詢?特別是與$容量被要求,$地點/$ RoomType預計留空或填寫在用戶的判斷?
我目前編碼PHP一個簡單的搜索腳本,需要從即用戶三個變量: $容量,$位置和$ RoomType起草SQL搜索查詢基於用戶輸入
容量是jquery validate插件檢查輸入數字條目所需的字段 - 但是位置和RoomType是可選的。
我想現在草擬一個SQL查詢,將搜索表房間。
有三個表中的列也被稱爲容量,位置和RoomType,我想用變量進行搜索。
我該如何編寫這個SQL查詢?特別是與$容量被要求,$地點/$ RoomType預計留空或填寫在用戶的判斷?
你可以在你的SQL查詢中使用LIKE ...%
,這樣即使是空白的,它也會被視爲通配符。
$q = 'SELECT * FROM foo WHERE capacity = "'.$capacity.'" AND location LIKE "'.$location.'%" AND roomtype LIKE "'.$roomtype.'%"';
當然,請記住要逃避投入。
像這樣的東西應該工作:
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;
}
雖然如今很多框架存在,讓你更輕鬆地做到這一點,不易出錯比手動各具特色查詢。
我使用Dreamweaver可以推薦任何可以使用的功能嗎? – methuselah 2012-02-20 19:58:43
$查詢= SELECT * FROM表,其中容量= $容量
如果(isset($位置)& & $位置!= '')$查詢=和位置LIKE '%$位置%'
如果(isset($ RoomType)& & $ RoomType!= '')$查詢=和RoomType LIKE '%$ RoomType%'
利用LIKE或=運算符在查詢是高達你。
'if(isset($ Location)&& $ Location!='')'等於'if(!empty($ location))' – 2012-02-20 21:06:23
依賴於它是如何複雜(或不???)
但基本上
Select ... From Rooms Where Capacity = @Capacity
and ((Location = @Location) Or (IsNull(@Location,'') = ''))
and ((RoomType = @RoomType) or (IsNull(@RoomType,'') = ''))
或類似。
如果您未使用參數化查詢,請將@ ....替換爲轉義輸入。
如何檢查Capacity變量是否在特定範圍內,例如,如果用戶鍵入50,那麼表中的條目爲100,那麼它落入範圍內? – methuselah 2012-02-20 19:58:17
在php中,你可以添加'$ capacityA = $ capacity - 50; $ capacityB = $ capacity + 50;'在MySQL中將其更改爲'WHERE容量BETWEEN $ capacityA AND $ capacityB' – 2012-02-20 20:34:10