首頁 >資料庫 >mysql教程 >如何在 PDO 中安全地使用帶有 ORDER BY 子句參數的準備語句?

如何在 PDO 中安全地使用帶有 ORDER BY 子句參數的準備語句?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-14 11:38:101042瀏覽

How Can I Securely Use Prepared Statements with ORDER BY Clause Parameters in PDO?

使用準備好的PDO 語句設定ORDER BY 參數

使用準備好的PDO 語句來設定ORDER BY 參數

使用準備好的PDO 語句來執行SQL 查詢時,嘗試設定時可能會出現困難ORDER BY 子句中的參數。本文透過探討限制並提供替代解決方案來解決此問題。

直接 SQL 插入

$order = 'columnName';
$direction = 'ASC';

$query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";

雖然在 WHERE 子句中使用參數是有效的,但將它們應用於 ORDER BY 條款被證明是有問題的。要繞過此限制,需要直接插入 SQL 查詢。然而,這種方法需要嚴格的預防措施來確保查詢的安全性和完整性,如下所示:

硬編碼運算子和識別碼

$orders = array("name", "price", "qty");
$key = array_search($_GET['sort'], $orders);
$order = $orders[$key];
$query = "SELECT * from table WHERE is_live = :is_live ORDER BY $order";

每個運算符和標識符ORDER BY子句中的內容必須在腳本中進行硬編碼,如下所示:

The同樣的原則也適用於方向。

白名單輔助函數

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";

為了盡量減少所需的程式碼量,可以使用白名單輔助函數:

此函數檢查值,如果無效則觸發錯誤。該技術確保了數據的有效性和安全性。

以上是如何在 PDO 中安全地使用帶有 ORDER BY 子句參數的準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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