在PDO 準備語句中使用ORDER BY 子句中的參數
在PDO 中,無法直接在ORDER BY 子句中使用參數。這可能會導致潛在的 SQL 注入漏洞。
遇到這種情況時,需要將 ORDER BY 子句直接插入 SQL 字串中。但是,必須小心防止 SQL 注入攻擊。
範例:
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT * FROM table WHERE column = :my_param ORDER BY $order $direction"; $stmt = $db->prepare($query); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->execute();
白名單輔助函數:
為了降低潛在風險,建議使用白名單輔助函數來驗證為ORDER BY 子句是合法的。以下是範例:
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } return $value; }
使用輔助函數:
$order = white_list($order, ["name", "price", "qty"], "Invalid field name"); $direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction"); $query = "SELECT field FROM table WHERE column = ? ORDER BY $order $direction"; $stmt = $db->prepare($query); $stmt->execute([$is_live]);
此方法可確保僅允許的值包含在ORDER BY 子句中,從而保護您的來自惡意輸入的應用程式。
以上是如何在 PDO 準備語句中安全地使用參數的 ORDER BY?的詳細內容。更多資訊請關注PHP中文網其他相關文章!