我正在开发一个房地产脚本。该脚本有一个搜索选项,用户可以在其中指定价格范围,例如。 user_price_low 到 user_price_high 并且列表必须从数据库中获取,该数据库具有例如。 db_price_high 和 db_price_low。
我使用了 BETWEEN 语句来尝试查找匹配项,
WHERE price_low BETWEEN '.$_REQUEST['minprice_buy'].' AND '.$_REQUEST['maxprice_buy']
但令我惊讶的是......
如果用户的 user_price_high = 60 且 user_price_low = 20 和 该记录的 db_price_low = 30 且 db_price_high = 120
在这种情况下我的查询无效。
我尝试查看MySql Query- Date Range within a Date Range但这符合我想要的吗?
最佳答案
Chandan,永远不要将 $_* 函数直接输入到查询中。这是一个 SQL 注入(inject)漏洞。
将代码更改为:
$min_price = mysql_real_escape_string($_REQUEST['minprice_buy']);
$max_price = mysql_real_escape_string($_REQUEST['maxprice_buy']);
$query = "SELECT whatever
FROM whichever
WHERE price_low BETWEEN '$min_price' AND '$max_price' ";
// Dont forget these quotes ^ ^ ^ ^
// Or mysql_real_escape_string() will not work!.
关于您的问题,请将查询更改为:
WHERE '$min_price' BETWEEN price_low AND price_high
AND '$max_price' BETWEEN price_low AND price_high
您可能还需要考虑:
WHERE ('$min_price' BETWEEN price_low AND price_high)
OR ('$max_price' BETWEEN price_low AND price_high)
这里,min_price
和 max_price
不需要始终都在该范围内。
参见:How does the SQL injection from the "Bobby Tables" XKCD comic work?
关于php - Mysql...价格范围内的价格范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336921/