Verwenden vorbereiteter PDO-Anweisungen zum Festlegen von ORDER BY-Parametern
Bei der Verwendung vorbereiteter PDO-Anweisungen zum Ausführen von SQL-Abfragen können beim Versuch, sie festzulegen, Schwierigkeiten auftreten Parameter innerhalb der ORDER BY-Klausel. Dieser Artikel befasst sich mit diesem Problem, indem er die Einschränkungen untersucht und alternative Lösungen bereitstellt.
Direkte SQL-Einfügung
Die Verwendung von Parametern in der WHERE-Klausel ist zwar funktionsfähig, ihre Anwendung auf die ORDER-Anweisung ist jedoch sinnvoll Die BY-Klausel erweist sich als problematisch. Um diese Einschränkung zu umgehen, ist eine direkte Einfügung in die SQL-Abfrage erforderlich. Dieser Ansatz erfordert jedoch strenge Vorsichtsmaßnahmen, um die Sicherheit und Integrität der Abfrage zu gewährleisten, wie unten dargestellt:
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";
Hardcodierung von Operatoren und Bezeichnern
Jeder Operator und Bezeichner innerhalb der ORDER BY-Klausel muss im Skript fest codiert sein, wie hier gezeigt:
$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";
Das gleiche Prinzip gilt für Richtung.
Hilfsfunktion für Whitelisting
Um die erforderliche Codemenge zu minimieren, kann eine Whitelisting-Hilfsfunktion eingesetzt werden:
$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";
Dies Die Funktion prüft den Wert und löst einen Fehler aus, wenn er ungültig ist. Diese Technik gewährleistet Datenvalidierung und -sicherheit.
Das obige ist der detaillierte Inhalt vonWie kann ich vorbereitete Anweisungen mit ORDER BY-Klauselparametern in PDO sicher verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!