php - Mysql...价格范围内的价格范围?

标签 php mysql range between

我正在开发一个房地产脚本。该脚本有一个搜索选项,用户可以在其中指定价格范围,例如。 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_pricemax_price 不需要始终都在该范围内。

参见:How does the SQL injection from the "Bobby Tables" XKCD comic work?

关于php - Mysql...价格范围内的价格范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336921/

相关文章:

php - wordpress如何存储wp_usermeta?

php - 组合框中的年份间隔

php - HTTP Post 参数以 json 编码传递给 $_POST

php - 需要帮助使用 php 和 mysql 制作搜索功能

mysql - 如何使用不相等的值<>比较一个模式中的两个表

mysql - 我得到 Cannot add or update a child row : a foreign key constraint fails error

swift - AND (&&) 运算符在 SWIFT 中未按预期工作

JavaScript - 如何用 span 标签包围 block 标签?

Python For 循环和范围函数

c# - PHP 中的 MACTripleDES