首頁 > 後端開發 > php教程 > 如何使用可變的 LIKE 條件建立安全的 MySQLi 預先準備語句?

如何使用可變的 LIKE 條件建立安全的 MySQLi 預先準備語句?

DDD
發布: 2024-12-04 11:39:15
原創
1592 人瀏覽過

How to Build a Secure MySQLi Prepared Statement with Variable LIKE Conditions?

使用變數LIKE 條件建立SELECT 查詢作為mysqli 準備語句

處理使用者輸入時,必須準備語句以防止SQL注入並確保資料完整性。當 LIKE 條件的數量可變時,這變得具有挑戰性。

問題概述

程式碼片段嘗試透過根據使用者輸入動態建立 LIKE 條件來解決此問題。但是,它無法正確格式化準備好的語句的參數。

解決方案在於在參數周圍放置 % 通配符,而不是佔位符。這確保了參數用於過濾查詢。

詳細說明

  1. 初始化成分:

    a.使用OR 建立資料表式數組。
    b.決定值的資料型態(在本例中為字串)。
    c.將資料型別和參數合併到一個陣列中。

  2. 準備條件:

    a。將使用者輸入轉換為唯一值數組。
    b.對於每個值,建立一個 LIKE 表達式。
    c.更新參數陣列以包含資料型別和通配符值。

  3. 準備查詢:

    a。從基本的 SELECT * 查詢開始。
    b.如果有條件,請新增帶有動態表達式的 WHERE 子句。

  4. 綁定參數並執行:

    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";
}
登入後複製

附加說明:

  • 附加說明:
如果沒有指定條件,則執行不含條件的查詢WHERE 子句。 如有必要,請考慮使用 addcslashes() 轉義使用者輸入中的通配符。

以上是如何使用可變的 LIKE 條件建立安全的 MySQLi 預先準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板