在準備好的PDO 語句中設定ORDER BY 參數
嘗試使用已準備好的PDO 在SQL 查詢的ORDER BY 部分使用參數時語句,重要的是要注意PDO 不支援直接綁定列名或排序方向作為參數。當未應用所需的排序順序時,這可能會導致混亂。
要解決此問題,您必須將ORDER BY 子句直接插入SQL 查詢中,如下例所示:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
轉義注意事項
確保ORDER 中的每個運算符和標識符都至關重要BY 子句被硬編碼在腳本中以防止安全漏洞。切勿將使用者提供的輸入直接插入 ORDER BY 子句中。
白名單輔助函數
要簡化驗證和白名單過程,您可以建立一個輔助函數:
function white_list($value, $allowed, $error) { if (in_array($value, $allowed)) { return $value; } else { throw new Exception($error); } }
此函數根據允許的選項清單檢查該值,如果該值會引發錯誤無效。
用法
使用白名單輔助函數,您可以為ORDER BY 子句建立安全的預備語句:
$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"; $stmt = $db->prepare($sql); $stmt->execute([$is_live]);
透過遵循這些準則,您可以在準備好的PDO 語句中正確設定ORDER BY 參數,同時保持安全性。
以上是如何在準備好的 PDO 語句中安全地使用 ORDER BY?的詳細內容。更多資訊請關注PHP中文網其他相關文章!