首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为搜索函数创建MySql查询

问为搜索函数创建MySql查询
EN

Stack Overflow用户
提问于 2017-09-14 02:26:28
回答 1查看 233关注 0票数 1

我有一些问题,查询搜索功能在我的网站。我有一个保存书籍数据的表格,在前面的页面中,我有搜索功能,通过一些搜索参数查找图书。

这是我的数据库表:

代码语言:javascript
复制
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

这是我在前端页面的搜索:

代码语言:javascript
复制
1. Input Field book name -- $name
2. Dropdown list book location -- $location
3. Search Button

上述四个参数是用于查询get搜索结果的变量。

我已经尝试过这个查询,但没有给出我想要的最佳结果。

代码语言:javascript
复制
SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."'

例如,当我选择下拉列表中的位置并将字段名为空时,我选择了rack1,得到了所有数据都显示出来的结果。我只想得到book_location在rack1中的数据。在我var_dump()查询之后,我才意识到我得到了这个查询:

代码语言:javascript
复制
SELECT * FROM `book` WHERE book_name like '%%' OR book_location = 'rack1'

我知道,通过这个查询,我将得到所有的数据,因为book_name like是'%%'。

我想问的是,如果没有填充搜索函数中的所有参数,如何对搜索进行最佳查询?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-09-14 02:34:38

只需检查$name是否为空,然后执行适当的查询:

代码语言:javascript
复制
if ($name !== "") {
    // SELECT * FROM `book` WHERE book_name like '%".$name."%' OR book_location = '".$location."'
}
else {
    // SELECT * FROM `book` WHERE book_location = '".$location."'
}

如果使用短路条件,也可以在一个查询中执行此操作:

代码语言:javascript
复制
SELECT * FROM book WHERE (".$name." != "" AND book_name LIKE '%".$name."%') OR book_location = '".$location."';

只有当第一个操作数也为真时,才会检查第二个操作数($name不是空的)。

作为警告,您似乎很容易受到注入的攻击。使用准备好的陈述!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46209536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档