我目前正在用PHP编写一个简单的搜索脚本,需要用户提供三个变量: $ Capacity , $ Location 和 $ RoomType
容量是jquery validate插件检查输入数字输入的必填字段 - 但位置和 RoomType 是可选的。
我正在尝试草拟一个SQL查询,该查询将搜索表 rooms 。
表格中有三列也称为容量,位置和 RoomType ,我想使用变量进行搜索。
我该如何编写这个SQL查询?特别是需要 $ Capacity , $ Location / $ RoomType 预计会留空或由用户自行决定填写?
答案 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,'') = ''))
或者其他一些。
如果您没有使用参数化查询,则将@ ....替换为转义输入。