首頁 >後端開發 >php教程 >如何使用 mysqli 預準備語句高效建立動態 LIKE 查詢?

如何使用 mysqli 預準備語句高效建立動態 LIKE 查詢?

Linda Hamilton
Linda Hamilton原創
2024-12-03 08:23:10229瀏覽

How to Efficiently Build Dynamic LIKE Queries with mysqli Prepared Statements?

使用mysqli 預準備語句進行動態LIKE 查詢

此問題解決了基於以下條件建立具有可變數量的LIKE 條件的預準備語句的問題:使用者輸入。提供的 PHP 程式碼嘗試建構語句,但存在與 LIKE 子句格式相關的錯誤。

關鍵問題在於百分號 (%) 放在參數 (?) 周圍的位置在 LIKE 子句中。百分號不應包裹參數,而應圍繞佔位符,如下所示:

foreach ( $search_exploded as $search_each ) {
    $x ++;
    if ( $x == 1 ) {
        $construct .= "name LIKE %??%";
    } else {
        $construct .= " or name LIKE %??%";
    }
}

此更正可確保參數值(例如「我的名字」)正確綁定到LIKE 子句.

此外,程式碼使用連接字串($construct) 來建構WHERE 子句。然而,更有效率、安全的方法是對所有參數使用bind_param()佔位符數組,如下所示:

$where_params = [];
foreach ( $search_exploded as $search_each ) {
    $where_params[] = "%{$search_each}%";
}

$query = "SELECT * FROM info WHERE name LIKE ?";
$stmt = mysqli_prepare( $conn, $query );
mysqli_stmt_bind_param( $stmt, "s", ...$where_params );

此方法可以優雅地處理任意數量的LIKE 條件並消除SQL 注入的風險

透過這些修改,動態LIKE 查詢可以根據多個使用者定義的條件正確搜尋記錄。

以上是如何使用 mysqli 預準備語句高效建立動態 LIKE 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn