參數可以取代 PHP PDO 語句中的表名或列名嗎?
不可能將表名作為參數傳遞給準備好的 PDO 語句。請考慮嘗試執行此操作的以下程式碼:
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); }
此方法將導致錯誤,因為表格和列名稱無法用參數取代。
安全插入表名插入 SQL 查詢
為了安全地將表名插入 SQL 查詢,需要一種替代方法。避免直接將使用者輸入輸入查詢中,例如:
$sql = "SELECT * FROM $table WHERE 1"
相反,請考慮過濾和清理輸入。一種方法是將速記參數傳遞給動態執行查詢的函數。然後可以使用 switch() 語句將有效的表名稱列入白名單。例如:
function buildQuery( $get_var ) { switch($get_var) { case 1: $tbl = 'users'; break; } $sql = "SELECT * FROM $tbl"; }
省略預設情況或使用顯示錯誤訊息的情況,您可以保證僅使用所需的值。
以上是PHP PDO 準備語句可以使用表名或列名參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!