如何使用'%'where和'OR'编写SQL'LIKE'查询以进行搜索操作?

时间:2019-04-15 05:35:29

标签: php mysql if-statement

我试图将SQL LIKE用于两个不同的列。可以使用这种类型的操作吗?

我已经尝试过:

$sWhere .= " file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%' and ";

但是以上代码仅适用于单个情况。我想同时搜索两者。

这是我的代码:

if (isset($search_item) && $search_item != '') {
      $sWhere .= " file_name like '%" . $search_item . "%' and ";
    }

我想使用两个列名和一个搜索字段来执行搜索操作。

响应:

SELECT a.id, a.file_name, a.file_path,a.upload_type,a.upload_by, b.username,a.addedon 
FROM tbl_asd as a 
INNER JOIN user as b on b.id = a.upload_by 
WHERE a.upload_type = 'asd' and  a.addedon >= ( CURDATE() - INTERVAL 1000 DAY ) and (file_name like '%asd%' OR upload_by like '%asd%')  ORDER BY id desc limit 0,10

发现“无行”!

引导我! 谢谢!

3 个答案:

答案 0 :(得分:1)

您需要将OR子句的WHERE部分括在括号中,否则您将获得比预期更多的结果(基本上任何包含file_name like '%" . $search_item . "%'的行)。改用它:

$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";

请注意,按原样查询可以使您易于进行SQL注入。理想情况下,您应该准备查询,而不要使用类似以下代码:

$query = "SELECT ... FROM ... WHERE";
$params = array();
$types = '';
if (isset($search_item) && $search_item != '') {
     $query .= " file_name like ? OR name like ? AND ";
     $types .= 'ss';
     array_push($params, "'%$search_item%'", "'%$search_item%'");
}
// add other where clauses in a similar way
// ...
// make sure we have a trailing `WHERE` clause
$query .= '1 = 1';
$stmt = $link->prepare($link, $query) or die($link->error);
$stmt->bind_param($types, ...$params);
$stmt->execute() or die($stmt->error);

答案 1 :(得分:0)

$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";

答案 2 :(得分:0)

您可以使用concat来构建适当的条件

$sWhere .= " file_name like concat('%', $search_item ,'%') OR name like concat('%', $search_item ,'%') ";

(删除了字符串末尾的AND)

无论如何,您应该查看数据库驱动程序中准备好的状态和绑定参数,因为在SQL中使用PHP可能会产生SqlInjection