我正在编写一个查询,该查询使用搜索表单中的输入,其中品牌、类型和价格是可选输入字段:
SELECT * FROM `database` WHERE `brand` LIKE "%' . $brand . '%" AND `type` LIKE "%' . $type. '%" AND `price` LIKE "%' . $price . '%"
我想知道如果其中一个字段没有输入任何内容,是否有办法说“全部”。例如,如果他们没有在价格字段中输入值,有没有办法告诉 SQL 忽略该部分,例如:
AND `price` LIKE "*";
因此,结果仍然按品牌和类型过滤,但可以有任何价格。
对此有任何建议表示赞赏!谢谢
正如 Ariel 提到的,最好让 PHP 在构建查询时进行过滤。这是这样做的代码示例:
<?php
$sql = 'SELECT * FROM `database`';
$where = array();
if ($brand !== '') $where[] = '`brand` LIKE "%'.$brand.'%"';
if ($type !== '') $where[] = '`type` LIKE "%'.$type.'%"';
if ($price !== '') $where[] = '`price` LIKE "%'.$price.'%"';
if (count($where) > 0) {
$sql .= ' WHERE '.implode(' AND ', $where);
} else {
// Error out; must specify at least one!
}
// Run $sql
NOTE: 拜托拜托,please确保$brand
, $type
, and $price
变量内容在您以这种方式使用之前会被清理,否则您将容易受到 SQL 注入攻击(理想情况下您应该使用 PHPPDO http://www.php.net/manual/en/class.pdo.php带有准备好的语句的数据库连接器来清理输入)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)