php - Mysql查询找不到第一个词

标签 php mysql database pattern-matching

我正在用 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 :

    不会返回任何东西,因为 kaokOkapika之后有东西.通过此查询,您正在寻找以您的表达式开头的所有内容;

  • 匹配%ka% :

    将同时返回 kaokOkapi .通过此查询,您正在寻找所有包含您的表达式;

  • 匹配ka% :

    只会返回kaok .通过此查询,您正在寻找以您的表达式结尾的所有内容。

看看 MySQL Dev guide关于模式匹配。

当然,正如 Elzo Valugi 所指出的,在他的回答中,您需要记住清理输入以避免 SQL 注入(inject)。

关于php - Mysql查询找不到第一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809684/

相关文章:

php - jQuery preventDefault() 在 AJAX 调用中不起作用

javascript - 对元素 id 的链接使用react

php - 数据表长出容器DIV

php - Laravel 5 检查当前 url 是否匹配 Action

php - 如何获得可用的 mime 类型的 blob 数据?

java - 从 hibernate 列表中选择所有项目

php - mysql中列值不超过255

php - 我应该从哪里开始正确理解 ORM 的概念

php - 多个文件上传不会将所有文件插入数据库

sql-server - SQL : Distinct Medications to Columns Using Pivot