PDO 準備語句:設定ORDER BY 參數
使用準備好的PDO 語句時,嘗試在語句中使用參數時可能會遇到到困難ORDER BY 子句。雖然該語句執行時不會出錯,但可能不會回傳任何結果。
要解決此問題,需要將ORDER BY 參數直接插入SQL 語句中,如以下程式碼所示:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
確保每個運算子和識別碼都是硬編碼而不是動態生成的至關重要。這種方法有助於防止注入攻擊。
增強程式碼安全性的另一種方法是使用白名單輔助函數,如下所示:
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } else { return $value; } }
透過使用此函數,您可以檢查輸入的值是否存在於預在定義的有效值清單中,如果不存在則引發錯誤。
利用這個方法,您準備好的語句將既安全又能夠正確處理 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 參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!