我在社区里寻找过答案,但找不到任何具体的答案。我有这个页面,我可以搜索我的mysql数据库中以前注册的用户的名字。我目前正在使用以下语句:
PHP: $value = str_replace(' ', '%', $search);
sql语句: "select * from user where name like '%".$value."%' order by name asc;"
$search变量来自同一页上的搜索表单(上面的代码允许我使用多个值进行查询)。例如,考虑一个名为luiz henrique da silva的用户,如果我搜索luiz、luiz henrique甚至luiz silva,这段代码将非常有效,列出该用户。
但我的问题是:如果我按顺序搜索名称,比如silva henrique或silva luiz,则不会列出用户。如何以简单的方式启用此反向搜索?
请注意,使用这段代码我可以搜索单独的值,因此我的需要是使用无序的值进行查询!
3条答案
按热度按时间jrcvhitl1#
ih99xse12#
PHP:
所以要分别使用每个词。但并不安全:sql注入。
对于连续的空间,使用preg\u替换caters:
i2loujxw3#
将未初始化的用户输入直接插入到查询中是个坏主意,因为有人可以执行自己的查询并破坏您的数据/安全性。查看准备好的报表:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php.
对于您的问题,您可以使用提供的搜索,例如:luiz henrique,用空格将其分开,得到“luiz”和“henrique”,然后创建一个类似以下内容的语句:
WHERE name LIKE '%Luiz%' AND name LIKE '%Henrique%'
这样你就可以继续添加AND
LIKE
每个单独组件的语句。