Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich in der ORDER BY-Klausel meiner SQL-Anweisung keine PDO-Parameter verwenden?
ORDER BY-Parameter in PDO-Anweisungen
Sie haben Schwierigkeiten bei der Verwendung von Parametern in der ORDER BY-Klausel Ihrer SQL-Anweisung. Die Parameter :order und :direction liefern keine Ergebnisse.
Problemursache
PDO-Parameter können nicht direkt in der ORDER BY-Klausel verwendet werden. Es müssen statische Zeichenfolgen sein.
Lösung
Es gibt keine PDO-Konstanten für Spaltennamen oder Sortierrichtungen. Daher müssen Sie diese Werte direkt in die SQL-Anweisung einfügen. Es ist jedoch wichtig, Vorsichtsmaßnahmen zu treffen:
$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]);
Erklärung
Die Whitelisting-Funktion prüft den Wert und löst einen Fehler aus, wenn er falsch ist, wodurch das SQL-Risiko gemindert wird Injektionsattacken.
Beispiel
$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();
Das obige ist der detaillierte Inhalt vonWarum kann ich in der ORDER BY-Klausel meiner SQL-Anweisung keine PDO-Parameter verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!