Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich in der ORDER BY-Klausel meiner vorbereiteten PDO-Anweisung keine Parameter verwenden?
Verwendbarkeit von Parametern in der ORDER BY-Klausel mit vorbereiteter PDO-Anweisung
In Ihrer SQL-Anweisung stoßen Sie auf Schwierigkeiten, wenn Sie Parameter innerhalb der ORDER BY verwenden Klausel. Trotz der Bindung von Parametern an die Platzhalter :order und :direction wird die Anweisung ohne Ausgabe ausgeführt.
Im Gegensatz zum Platzhalter :my_param, der ordnungsgemäß funktioniert, erfordern die Platzhalter :order und :direction eine direkte Einfügung in die SQL. Sie können dies wie folgt tun:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Es gibt keine PDO::PARAM_COLUMN_NAME-Konstante oder einen ähnlichen Ersatz. Die Einschränkung besteht darin, dass alle Operatoren und Bezeichner in der ORDER BY-Klausel fest codiert sein müssen. Zum Beispiel:
$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";
Whitelisting, wie unten gezeigt, ist ein alternativer Ansatz, der vor ungültigen Eingaben schützt:
$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]);
Dadurch wird sichergestellt, dass falsche Werte gekennzeichnet und ordnungsgemäß behandelt werden, was die Sicherheit erhöht Ihrer Bewerbung.
Das obige ist der detaillierte Inhalt vonWarum kann ich in der ORDER BY-Klausel meiner vorbereiteten PDO-Anweisung keine Parameter verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!