Geordnete Abfragen mit PDO-vorbereiteten Anweisungen
Bei Datenbankinteraktionen ist das Ordnen von Abfrageergebnissen eine häufige Aufgabe. Die Verwendung von PDO-vorbereiteten Anweisungen mit Parametern ermöglicht das sichere Einfügen von Bestellparametern. Beim Versuch, Parameter in der ORDER BY-Klausel zu verwenden, können jedoch Schwierigkeiten auftreten.
Die folgende Abfrage zeigt die Verwendung von Parametern für die WHERE-Klausel, wendet jedoch keine Reihenfolge an:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction"); $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();
Die Die Parameter :my_param, :order und :direction werden mithilfe von Parametermarkierungen gebunden. Allerdings funktioniert die Bestellklausel nicht richtig. Man könnte einen Escape-Mechanismus für die Parameter in der ORDER BY-Klausel erwarten, aber diesen gibt es nicht.
Stattdessen ist es notwendig, die Bestellparameter mit den richtigen Vorsichtsmaßnahmen direkt in die SQL-Anweisung einzufügen:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Um die Sicherheit zu gewährleisten, wird empfohlen, Werte für Bestellparameter auf die Whitelist zu setzen. Der folgende Codeausschnitt veranschaulicht einen Whitelisting-Mechanismus mithilfe eines Arrays:
$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";
Dieser Ansatz stellt sicher, dass nur vordefinierte und sichere Werte für die Bestellung verwendet werden können, wodurch potenzielle Sicherheitslücken vermieden werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Abfrageergebnisse mithilfe von PDO-vorbereiteten Anweisungen sicher anordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!