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

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

DDD
DDDOriginal
2024-12-27 01:39:09943Durchsuche

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

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:

  1. Jeden Operator und Bezeichner in Ihrem Skript fest codieren.
$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";
  1. Verwenden Sie einen Whitelist-Helfer Funktion:
$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!

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