首頁  >  文章  >  資料庫  >  PHP PDO 準備語句中可以綁定識別字和關鍵字嗎?

PHP PDO 準備語句中可以綁定識別字和關鍵字嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 11:34:10966瀏覽

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

PHP PDO 準備語句中的綁定識別碼和語法關鍵字

動態查詢透過利用變數定義表名、列來允許靈活的資料庫操作名稱和搜尋值。但是,使用 PDO 準備好的語句綁定識別碼(表或欄位名稱)或語法關鍵字可能會導致意外結果。

問題:

使用bindParam() 或bindValue 時() 綁定表示標識符或語法關鍵字的變量,返回空數組而不是預期的資料庫結果。

解釋:

PDO 準備好的語句只能綁定資料文字。因此,嘗試綁定標識符或關鍵字不會得到預期的結果。

解決方案:

要建立安全可靠的動態查詢,至關重要:

  • 正確格式化識別符:將標識符括在反引號(') 中並轉義通過將它們加倍(```)來在內部加上反引號。
  • 使用白名單: 根據允許值的硬編碼清單驗證動態標識符,以防止潛在的注入。
  • 對語法關鍵字套用相同的規則:白名單並驗證動態中使用的所有語法關鍵字查詢。

程式碼範例:

格式化並驗證識別碼:

$field = "`" . str_replace("`", "``", $field) . "`";

白名單並驗證關鍵字:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 

然後,將清理後的變數包含在準備好的變數中宣告:

$stmt = $db->prepare('
    SELECT 
        * 
    FROM 
        ?
    WHERE 
        ? LIKE ?
');
$stmt->bindParam(1, $searchTable);
$stmt->bindParam(2, $searchBy);
$stmt->bindValue(3, '%' . $searchTerm . '%');

透過遵守這些規則,您可以確保動態資料庫查詢的有效性和安全性。

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

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