使用準備好的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中文網其他相關文章!