PHP SQL搜索查询匹配

PHP SQL搜索查询匹配,php,sql,mysqli,Php,Sql,Mysqli,我有一个PHP搜索页面,它使用以下查询从数据库中获取内容 SELECT * FROM linkBase WHERE (`title` LIKE '%".$s."%') OR (`descr` LIKE '%".$s."%') 以下是我的数据库的外观: id |title |descr ----------------------------------------- 1 |Hello World |This is a hello world description 2

我有一个PHP搜索页面,它使用以下查询从数据库中获取内容

SELECT * FROM linkBase WHERE (`title` LIKE '%".$s."%') OR (`descr` LIKE '%".$s."%')
以下是我的数据库的外观:

id  |title         |descr
-----------------------------------------
1   |Hello World   |This is a hello world description
2   |PiedPiper     |The silicon valley company PiedPiper
3   |StackOverflow |Ask questions on programming
现在,例如,如果我以$s=silicon valley的值运行这个查询,那么它将获取第2行。这很好。但如果用户以silicon PiedPiper的身份输入搜索词会怎样呢。对于上述SQL查询,它不返回任何结果。如何修改查询,使其返回第2行和第二个搜索词

问题摘要:
我如何使用PHP和SQL进行搜索查询,即使用户在数据库中输入两个单词,而不是像“{.$s.}%”这样的单词,或者像“{.$s.}%”这样的单词,或者是老式的“{.$s.}”这样的单词,也会返回结果“>0

如果您需要支持搜索中单词的任意顺序,我建议将REGEXP-MySQL函数与以下简单或正则表达式一起使用

SELECT * FROM linkBase WHERE (`title` REGEXP 'silicon|PiedPiper') OR (`descr` REGEXP 'silicon|PiedPiper')
因此,您可以用PHP替换空格,并用管道符号替换它们,并且单词的顺序不再重要


这将选择至少包含一个单词的所有行,如果需要匹配列表中的所有单词,可能需要另一个正则表达式。

并且是由不同公司生产的不同软件包。即使两者都实现了SQL,它们也以不同的方式对SQL进行扩展,有时它们使用不同的语法约定,使得它们之间的查询不兼容。请仅使用与您正在使用的软件匹配的标记。将空格替换为%sign-in$s…请注意此代码的sql注入。尝试改用参数化查询。