使用準備好的語句綁定標識符和關鍵字
問題:
建立動態查詢使用準備好的語句,但嘗試綁定表名、欄位名稱或語法關鍵字會導致一個空數組。
代碼:
function search_db($db, $searchTerm, $searchBy, $searchTable){ try{ $stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%'. $searchTerm.'%'); $stmt->execute(); } catch(Exception $e) { return array(); } return $stmt->fetchAll(PDO::FETCH_ASSOC); }
預期結果:
來自資料庫的結果陣列。
實際結果:
空數組。
原因:
準備好的語句只能綁定資料文字,不能綁定識別碼(例如表或欄位名稱)或語法關鍵字。
解決方案:
要使用動態識別碼或關鍵字,請依照下列步驟操作步驟:
格式識別碼:
白名單動態值:
修改代碼:
$field = "`" . str_replace("`", "``", $field) . "`"; $table = "`" . str_replace("`", "``", $table) . "`"; $sql = "SELECT * FROM $table WHERE $field = ?";
關鍵字:
如果必要時,也可以將動態關鍵字列入白名單並驗證動態關鍵字。透過遵循這些準則,您可以安全地在準備好的語句中包含動態標識符和關鍵字。
以上是如何在準備好的語句中安全地使用動態表和欄位名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!