PDO 參數:它們可以接受表名或列名作為輸入嗎?
嘗試將表名作為參數包含在準備好的PDO 中語句,如下面的程式碼片段所示,將導致failure:
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); }
為什麼這不可能?
PDO 參數適用於在查詢執行期間動態分配的資料值。另一方面,表格和列名稱是資料庫模式的靜態元素,不適合參數化。
包含表名稱的安全替代方案
安全插入將表名放入 SQL 查詢中,建議手動過濾和清理資料。這可以透過將白名單switch() 語句合併到動態執行查詢的函數中來實現:
function buildQuery( $get_var ) { switch($get_var) { case 1: $tbl = 'users'; break; } $sql = "SELECT * FROM $tbl"; }
透過設定特定情況並處理任何無效場景,查詢將僅在允許的情況下執行表名。這種方法可確保使用者輸入不會直接影響 SQL 查詢,從而保持資料完整性。
以上是PDO 參數可以用於 SQL 查詢中的表名或列名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!