首頁  >  文章  >  資料庫  >  準備好的語句可以處理資料庫識別碼和關鍵字嗎?

準備好的語句可以處理資料庫識別碼和關鍵字嗎?

Linda Hamilton
Linda Hamilton原創
2024-11-18 18:46:02594瀏覽

Can Prepared Statements Handle Database Identifiers and Keywords?

準備好的語句:它們可以處理識別字和關鍵字嗎?

動態查詢利用變數來指定表格、欄位和搜尋值。雖然將變數連接到查詢中已被證明是成功的,但使用 PDO 的 bindParam() 或 bindValue() 綁定變數會導致空數組。

為什麼不行:

PDO 準備好的語句只允許資料文字的佔位符。嘗試使用佔位符表示標識符(表或欄位名稱)或關鍵字將無法運作。

解決方案:

  • 識別碼: 要包含表示標識符的變量,請遵循以下步驟規則:

    • 將識別符括在反引號(`) 中。
    • 透過將變數加倍來轉義變數內的反引號(``).
  • 關鍵字:

    • 關鍵字:
    根據白名單檢查使用者提供的關鍵字。
僅使用白名單中的關鍵字查詢。

// Safely format identifier
$field = "`" . str_replace("`", "``", $field) . "`";
$sql = "SELECT * FROM t ORDER BY $field";

// Whitelist keyword
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
$sql = "SELECT * FROM t ORDER BY field $dir";
範例程式碼:

以上是準備好的語句可以處理資料庫識別碼和關鍵字嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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