sql >> Database >  >> RDS >> Mysql

Hoe stel ik ORDER BY-params in met behulp van een voorbereid PDO-statement?

Ja, je zit vast door het rechtstreeks in de SQL in te voegen. Met wat voorzorgsmaatregelen natuurlijk. Elke operator/identifier moet hardcoded zijn in je script, zoals dit:

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

Hetzelfde geldt voor de richting.

Ik schreef een whitelisting helperfunctie om in dergelijke gevallen te gebruiken, vermindert het de hoeveelheid code die moet worden geschreven aanzienlijk:

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

Het idee hier is om de waarde te controleren en een fout op te heffen als deze niet correct is.



  1. Betekenis van Oracle's dump (systimestamp) bytes

  2. Een beginnershandleiding voor SQL-tabellen

  3. Instellen en identificeren van rijdoelen in uitvoeringsplannen

  4. CURRENT_TIMESTAMP in milliseconden