Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie setze ich ORDER BY-Parameter mit einer vorbereiteten PDO-Anweisung?

Ja, Sie stecken fest, wenn Sie es direkt in das SQL einfügen. Natürlich mit einigen Vorsichtsmaßnahmen. Jeder Operator/Bezeichner muss fest codiert sein in Ihrem Skript wie folgt:

$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";

Gleiches gilt für die Richtung.

Ich habe eine Whitelist-Hilfsfunktion geschrieben um in solchen Fällen verwendet zu werden, reduziert es die Menge des zu schreibenden Codes erheblich:

$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]);

Die Idee hier ist, den Wert zu überprüfen und einen Fehler auszulösen, falls er nicht korrekt ist.