我的网站查询搜索功能有些问题。我有一个保存书籍数据的表,在前端页面我有搜索功能,通过一些搜索参数找到书。
这是我的数据库表:
book_id | book_name | book_location | book_qty | book_date
-----------------------------------------------------------------
1 | Triangle Math | rack1 | 2 | 2017-06-12
2 | Basic Knowledge | rack2 | 3 | 2016-08-09
3 | Legend Truth | rack3 | 1 | 2014-05-17
4 | Temporary Brain | rack4 | 1 | 2013-01-23
这是我在前端页面中的搜索:
1. Input Field book name -- $name
2. Dropdown list book location -- $location
3. Search Button
上面的四个参数是查询中用于获取搜索结果的变量。
我已经尝试过这个查询,但没有给我最好的结果。
SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."'
当我只选择下拉列表中的位置并将字段簿名称留空时,例如我选择 rack1 我得到了结果所有数据都显示出来。我只想获取 rack1 中book_location
的数据。在我var_dump()
查询之后,我才意识到我收到了这个查询:
SELECT * FROM `book` WHERE book_name like '%%' OR book_location = 'rack1'
我知道该查询会得到所有数据,因为book_name like
是'%%'
。
我想问的是,如果没有填写搜索功能中的所有参数,如何对搜索进行最佳查询?谢谢。
答案 0 :(得分:0)
只需检查$name
是否为空,然后执行相应的查询:
if ($name !== "") {
// SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."'
}
else {
// SELECT * FROM `book` WHERE book_location = '".$location."'
}
如果您使用短路条件,也可以在一个查询中执行此操作:
SELECT * FROM book WHERE (".$name." != "" AND book_name LIKE '%".$name."%') OR book_location = '".$location."';
只有当第一个操作数也为真时才会检查第二个操作数($name
不为空)
作为警告,您似乎容易受到SQL注入攻击。使用prepared statements!