通过mysqli搜索忽略非字母数字字符

时间:2016-07-26 02:25:55

标签: php regex search mysqli

有一个问题试图找出在用户输入的搜索字符串中搜索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%'或名称1喜欢'%f18%'或名称2喜欢'%f18%'

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

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

谢谢!

1 个答案:

答案 0 :(得分: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