Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich in der ORDER BY-Klausel meiner vorbereiteten PDO-Anweisung keine Parameter verwenden?

Warum kann ich in der ORDER BY-Klausel meiner vorbereiteten PDO-Anweisung keine Parameter verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-17 16:54:15600Durchsuche

Why Can't I Use Parameters in the ORDER BY Clause of My Prepared PDO Statement?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn