
使用變數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中文網其他相關文章!