我有一些问题,查询搜索功能在我的网站。我有一个保存书籍数据的表格,在前面的页面中,我有搜索功能,通过一些搜索参数查找图书。
这是我的数据库表:
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上述四个参数是用于查询get搜索结果的变量。
我已经尝试过这个查询,但没有给出我想要的最佳结果。
SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."'例如,当我选择下拉列表中的位置并将字段名为空时,我选择了rack1,得到了所有数据都显示出来的结果。我只想得到book_location在rack1中的数据。在我var_dump()查询之后,我才意识到我得到了这个查询:
SELECT * FROM `book` WHERE book_name like '%%' OR book_location = 'rack1'我知道,通过这个查询,我将得到所有的数据,因为book_name like是'%%'。
我想问的是,如果没有填充搜索函数中的所有参数,如何对搜索进行最佳查询?谢谢。
发布于 2017-09-14 02:34:38
只需检查$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不是空的)。
作为警告,您似乎很容易受到注入的攻击。使用准备好的陈述!
https://stackoverflow.com/questions/46209536
复制相似问题