在開發搜尋功能時,常需要支援多關鍵字且跨多個欄位進行模糊查詢。本文分享一個實用的 PHP 函式,能根據傳入的關鍵字字串、資料表名稱與欄位組合,自動產生對應的 SQL 查詢語句。
假設關鍵字為 "1 2 3",資料表為 enter_gongyin_pic,搜尋欄位為 a+b+c(以 + 分隔多欄位)。呼叫函式:
$sql = search($keyword, "enter_gongyin_pic", "a+b+c");
將產生如下 SQL:
SELECT * FROM `enter_gongyin_pic`
WHERE `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%'
OR `b` LIKE '%1%' OR `b` LIKE '%2%' OR `b` LIKE '%3%'
OR `c` LIKE '%1%' OR `c` LIKE '%2%' OR `c` LIKE '%3%'
關鍵字以空格分隔,支援單一或多欄位搜尋,靈活度極高。
function search($keyword, $table, $field) {
// 解析欄位組合(以 + 分隔)
$fields = explode("+", $field);
$fieldCount = count($fields);
// 解析關鍵字(以空格分隔,並過濾空值)
$keywords = array_filter(explode(" ", $keyword));
$keywordCount = count($keywords);
// 構建 SQL 基礎結構
$sql = "SELECT * FROM `$table` WHERE ";
$conditions = [];
if ($fieldCount == 1) {
// 單一欄位,多關鍵字 OR 邏輯
foreach ($keywords as $kw) {
$conditions[] = "`{$fields[0]}` LIKE '%$kw%'";
}
} else {
// 多欄位:每個欄位對每個關鍵字產生條件
foreach ($fields as $f) {
foreach ($keywords as $kw) {
$conditions[] = "`$f` LIKE '%$kw%'";
}
}
}
$sql .= implode(" OR ", $conditions);
return $sql;
}
"北京 上海 廣州"+ 連接,如 title+content+author此函式可整合至 MVC 架構的 Model 層,搭配分頁、排序參數,快速構建後台管理系統的通用搜尋模組。實際專案中建議加入 SQL 注入防護(如使用 PDO 預處理),並依資料量評估是否需全文索引優化。
希望這個函式能為你的 PHP 專案帶來便利!