保護您的資料庫:在準備好的語句中正確使用 LIKE '%{$var}%'
建立響應用戶輸入的動態搜尋功能需要仔細考慮安全性。 一個常見的場景是使用 MySQL 的 LIKE
運算子搜尋包含部分符合的使用者名稱。 但是,直接將使用者輸入合併到準備好的語句中的 LIKE
子句中很容易出現 SQL 注入漏洞。
不正確的方法通常涉及嘗試在 LIKE
通配符中嵌入佔位符,例如 SELECT * FROM users WHERE username LIKE '%{?}%'
。這是有缺陷的,因為資料庫驅動程式無法正確解釋佔位符語法。
安全實現的關鍵在於LIKE
在準備語句之前建立表達式。這可確保使用者輸入得到正確的清理並被視為數據,而不是可執行程式碼。 正確的方法是:
<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards $stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?"); $stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression $stmt->execute();</code>
在這個改進的範例中,%
通配符被加入到使用者提供的 $yourParam
中,以建立儲存在 LIKE
中的完整 $searchParam
模式。 然後使用帶有字串類型(“s”)的 bind_param
將這個完整的模式綁定到準備好的語句的佔位符。 這可以防止 SQL 注入,同時保持動態搜尋功能。 這種方法保證了準備好的語句所提供的安全性和效率。
以上是如何安全地使用 MySQL 的 LIKE '%{$var}%' 和預處理語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!