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