我正在用 PHP
构建一个简单的搜索引擎,当用户搜索它时,它会从 MySQL 数据库中检索动物名称。
假设我有下表:
ID | Name
---------------
1 | Red panda
2 | Okapi
3 | Red fox
当用户输入 "panda"
时,它返回 Red Panda
行,当他们输入 "red panda"
时,它再次返回 code>小 Pandas 行
.
但是当用户输入 "red"
时,它什么都不返回。
但是搜索 "Okapi"
确实有效。
出于某种原因,在由多个单词组成的多个单词中搜索第一个单词不会返回任何内容。
我用来查找数据的查询如下:
"SELECT * FROM example_table WHERE Name LIKE '%%$search'"
最佳答案
如果您需要查找任何包含您正在搜索的内容,那么您应该使用%
$search
前后的通配符在查询中。
因此你应该这样做:
$query = "SELECT * FROM example_table WHERE Name LIKE %$search%";
您当前使用的方式将仅匹配那些具有 $search
的值在它的最后。
例如:
ID | Name
---------------
1 | Red panda
2 | Okapi
3 | Red fox
4 | kaok // added for examples
匹配
%ka
:不会返回任何东西,因为
kaok
和Okapi
在ka
之后有东西.通过此查询,您正在寻找以您的表达式开头的所有内容;匹配
%ka%
:将同时返回
kaok
和Okapi
.通过此查询,您正在寻找所有包含您的表达式;匹配
ka%
:只会返回
kaok
.通过此查询,您正在寻找以您的表达式结尾的所有内容。
看看 MySQL Dev guide关于模式匹配。
当然,正如 Elzo Valugi 所指出的,在他的回答中,您需要记住清理输入以避免 SQL 注入(inject)。
关于php - Mysql查询找不到第一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809684/