3 回答
TA贡献1884条经验 获得超4个赞
您需要将子句的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);
TA贡献1836条经验 获得超3个赞
您可以使用concat来构建适当的条件
$sWhere .= " file_name like concat('%', $search_item ,'%') OR name like concat('%', $search_item ,'%') ";
(删除了字符串末尾的AND)
无论如何,您应该查看数据库驱动程序以获取准备好的状态和绑定参数,因为在SQL中使用PHP可能会产生SqlInjection
TA贡献1830条经验 获得超3个赞
$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";
- 3 回答
- 0 关注
- 199 浏览
添加回答
举报