我目前编码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