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來構建適當?shù)臈l件
$sWhere .= " file_name like concat('%', $search_item ,'%') OR name like concat('%', $search_item ,'%') ";
(刪除了字符串末尾的AND)
無論如何,您應該查看數(shù)據(jù)庫驅動程序以獲取準備好的狀態(tài)和綁定參數(shù),因為在SQL中使用PHP可能會產生SqlInjection

TA貢獻1830條經驗 獲得超3個贊
$sWhere .= " (file_name like '%" . $search_item . "%' OR name like '%" . $search_item . "%') and ";
- 3 回答
- 0 關注
- 240 瀏覽
添加回答
舉報