如何使用like和多个无序值进行sql查询

tv6aics1  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(249)

我在社区里寻找过答案,但找不到任何具体的答案。我有这个页面,我可以搜索我的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,则不会列出用户。如何以简单的方式启用此反向搜索?
请注意,使用这段代码我可以搜索单独的值,因此我的需要是使用无序的值进行查询!

jrcvhitl

jrcvhitl1#

$search = 'Jobs Steve';
$search = mysql_real_escape_string($search);
$where_condition = '';
$search_arr = explode(' ', $search);
foreach($search_arr as $key => $name) {
    if ($where_condition != '') $where_condition .= ' AND ';
  $where_condition .= " name LIKE '%$name%' ";
}

$sql = "SELECT * FROM user WHERE $where_condition ORDER BY name ASC;";
``` `$sql` 会像一个 `SELECT * FROM user WHERE name LIKE '%Jobs%' AND name LIKE '%Steve%' ORDER BY name ASC;` 
ih99xse1

ih99xse12#

PHP:

$value = str_replace(" ", "%' and name like '%", $search);

所以要分别使用每个词。但并不安全:sql注入。
对于连续的空间,使用preg\u替换caters:

$value = preg_replace('/\s+/', "%' and name like '%", $search);
i2loujxw

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 每个单独组件的语句。

相关问题