PDO 語句中的 ORDER BY 參數
在 SQL 語句的 ORDER BY 子句中使用參數時遇到困難。 :order 和 :direction 參數無法產生任何結果。
問題原因
PDO 參數不能直接在 ORDER BY 子句中使用。它們必須是靜態字串。
解
列名稱或排序方向沒有 PDO 常數。因此,您必須將這些值直接插入 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 = 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]);
說明
白名單功能檢查值,如果不正確則引發錯誤,降低SQL 風險注射攻擊。
範例
$sql = "SELECT field from table WHERE column = :my_param"; $stmt = $db->prepare($sql); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->bindParam(':order', $order, PDO::PARAM_STR); $stmt->bindParam(':direction', $direction, PDO::PARAM_STR); $stmt->execute();
以上是為什麼我的SQL語句的ORDER BY子句中不能使用PDO參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!