1

我有一个搜索框,用户可以在其中搜索属性。在搜索框中有两个选择框。一种是最低价,一种是最高价。

如果用户选择最低价格 10 000 和最高价格 1 000 000,查询会是什么样子。

这是我的代码,但它似乎不起作用:

 SELECT * FROM property WHERE price > '%{$_POST['pricemin']}%' AND price < '%{$_POST['pricemax']}%'
4

3 回答 3

2

首先,永远不要将用户输入的值直接放入查询中。您要求进行 SQL 注入攻击。其次,您为什么要%对数字进行通配符匹配 ( )?

SELECT col1, col2, col3 FROM property WHERE price BETWEEN $min AND $max;
于 2013-03-12T13:44:09.353 回答
2

首先,%value%除非你使用LIKE. 其次,您应该真正使用准备好的语句:

if (isset($_POST['pricemin'], $_POST['pricemax'])) {
    $stmt = $db->prepare('SELECT * FROM property WHERE price > ? AND price < ?');
    $stmt->execute(array($_POST['pricemin'], $_POST['pricemax']));
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

以 PDO 为例;如果您没有 PDO 或 mysqli,请开始使用它!

于 2013-03-12T13:51:44.927 回答
0

好的,你需要先转义你的变量,所以试试这个

$pricemin = mysql_real_escape_string($_POST['pricemin']);
$pricemax = mysql_real_escape_string($_POST['pricemax']);

然后我认为你错过了一个小于

SELECT * FROM property WHERE price > '$pricemin' AND price < '$pricemax'

但是,如果您使用带有 php http://www.php.net/manual/en/book.mysqli.php的数据库,您应该查看 mysqli,因为mysql_real_escape_string()其他 mysql 功能已被贬值。

于 2013-03-12T13:48:34.393 回答