【问题标题】:Searching via mysqli ignoring non-alphanumeric characters通过 mysqli 搜索忽略非字母数字字符
【发布时间】:2016-11-29 12:39:07
【问题描述】:

在尝试找出使用用户输入的搜索字符串在 mysql 数据库(使用 php)中搜索某些内容的正确方法时遇到了一些问题……但我必须使用 LIKE 和 % 通配符并比较用户搜索数据库字段,忽略任何非字母数字字符。这非常复杂,虽然我在 StackOverflow 上看到了有关此主题的其他一些问题,但似乎没有一个有效的答案。

例如,假设我有一个带有“航空”表的数据库,其中包含以下内容:

MAKE               NAME1          NAME2
--------------------------------------------------------
Boeing             B-17G          Flying Fortress
Boeing             F-18E          Super Hornet
Lockheed           F-16C          Viper
Supermarine        Spitfire       Mk IX
McDonnellDouglas   F-18C          Hornet

现在我有一个用户搜索“f18”...

1) 由于我不知道这是飞机的品牌、名称 1 还是名称 2,而且我不知道用户是否输入了确切的类型(即 f-18c/f18c 与 f18),我需要让用户输入的搜索能够使用 LIKE 通配符在所有三个字段中搜索 %f18%。这是一个简单的WHERE Make LIKE '%f18%' OR Name1 LIKE '%f18%' OR Name2 LIKE '%f18%'

2) 虽然这很简单,但问题是在数据库中 f18 被列为 F-18...所以即使 %f18% 也找不到匹配的记录。我已经尝试将 Make、Name1 和 Name2 字段索引为 FULLTEXT 索引(我读过它会忽略字母数字字符),但是当我使用 LIKE %f18% 搜索应该返回两个F-18C 大黄蜂和 F-18E 超级大黄蜂匹配。是否可以使用 RegEx 来解决这个问题?我可以轻松地从用户输入的搜索中删除非字母数字字符,以防他们搜索 f-18 而不是 f18,但我必须将它们保存在数据库中。

所以问题是如何使用 mysqli 使用 LIKE 比较搜索多个字段并忽略用户输入搜索中的非字母数字字符?这甚至可能吗?

谢谢!

【问题讨论】:

  • 如果您要去除非字母数字字符,那么 likeregex 会起作用,我想。这种方法可能会产生与预期不同的结果。

标签: php regex search mysqli


【解决方案1】:

您好,如果您确定没有在搜索中添加alphanumeric,您可以使用此query,这将为您提供所需的result

SELECT  * from Aviation where replace(NAME1,'-','')  like '%f18%'  

尝试在phpmyadmin 中运行它。

有关replace() 的更多信息。请阅读此http://www.w3resource.com/mysql/string-functions/mysql-replace-function.php

【讨论】:

  • 完美!效果很好,谢谢!我希望这个答案能帮助更多在这里回答同样问题的人。
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2014-02-22
  • 2013-03-31
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多