首頁 >後端開發 >php教程 >PHP PDO 準備語句可以使用表名或列名參數嗎?

PHP PDO 準備語句可以使用表名或列名參數嗎?

DDD
DDD原創
2025-01-03 07:33:40513瀏覽

Can PHP PDO Prepared Statements Use Parameters for Table or Column Names?

參數可以取代 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn