我有一个搜索框,用户可以在其中搜索属性。在搜索框中有两个选择框。一种是最低价,一种是最高价。
如果用户选择最低价格 10 000 和最高价格 1 000 000,查询会是什么样子。
这是我的代码,但它似乎不起作用:
SELECT * FROM property WHERE price > '%{$_POST['pricemin']}%' AND price < '%{$_POST['pricemax']}%'
首先,永远不要将用户输入的值直接放入查询中。您要求进行 SQL 注入攻击。其次,您为什么要%
对数字进行通配符匹配 ( )?
SELECT col1, col2, col3 FROM property WHERE price BETWEEN $min AND $max;
首先,%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,请开始使用它!
好的,你需要先转义你的变量,所以试试这个
$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 功能已被贬值。