使用變數LIKE 條件建立SELECT 查詢作為mysqli 準備語句
處理使用者輸入時,必須準備語句以防止SQL注入並確保資料完整性。當 LIKE 條件的數量可變時,這變得具有挑戰性。
問題概述
程式碼片段嘗試透過根據使用者輸入動態建立 LIKE 條件來解決此問題。但是,它無法正確格式化準備好的語句的參數。
解
解決方案在於在參數周圍放置 % 通配符,而不是佔位符。這確保了參數用於過濾查詢。
詳細說明
初始化成分:
a.使用OR 建立資料表式數組。
b.決定值的資料型態(在本例中為字串)。
c.將資料型別和參數合併到一個陣列中。
準備條件:
a。將使用者輸入轉換為唯一值數組。
b.對於每個值,建立一個 LIKE 表達式。
c.更新參數陣列以包含資料型別和通配符值。
準備查詢:
a。從基本的 SELECT * 查詢開始。
b.如果有條件,請新增帶有動態表達式的 WHERE 子句。
綁定參數並執行:
a.使用splat 運算子(...) 將參數數組綁定到準備好的語句。
b.執行語句並檢索結果(如果有)。
範例程式碼:
$string = "Bill N_d Dave"; $conditions = []; $parameters = ['']; foreach (array_unique(explode(' ', $string)) as $value) { $conditions[] = "name LIKE ?"; $parameters[0] .= 's'; $parameters[] = "%{$value}%"; } $query = "SELECT * FROM info"; if ($conditions) { $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions)); $stmt->bind_param(...$parameters); $stmt->execute(); $result = $stmt->get_result(); } else { $result = $conn->query($query); } foreach ($result as $row) { echo "<div>{$row['name']}</div>\n"; }
附加說明:
以上是如何使用可變的 LIKE 條件建立安全的 MySQLi 預先準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!