php - 如何使用 '%' where 和 'OR' 编写 SQL 'LIKE' 查询以进行搜索操作?
问题描述
我正在尝试将 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
发现“无行”!
引导我!谢谢!
解决方案
您需要将子句的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);
推荐阅读
- python-3.x - 在 Python 中使用 Pandas 打开一个损坏的 .xls 文件
- excel - 区域大小不同时无法复制和粘贴
- swift - Swift,如何在没有显式转换的情况下将 String 转换为 Int?
- flutter - 我需要取消 Stream
(扑) - python - ValueError:islice() 的停止参数必须为 None 或整数:0 <= x <= sys.maxsize on topic coherence
- php - 获取具有年份和周数的星期几的日期
- c++ - C++ 编码的 DLL 返回 #VALUE!在 Excel 上
- elasticsearch - 在弹性搜索和 Kibana 中启用安全性时无法启动 logstash
- php - 在不同的国家显示不同的时间
- github - 如何避免 Github Actions 中的代码重复;yaml中有某种循环吗?