sql >> Databasteknik >  >> RDS >> Mysql

Hur ställer jag in ORDER BY-parametrar med en förberedd PDO-sats?

Ja, du har fastnat för att infoga det direkt i SQL. Med vissa försiktighetsåtgärder förstås. Varje operatör/identifierare måste vara hårdkodad i ditt skript, så här:

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

Samma sak för riktningen.

Jag skrev en hjälpfunktion för vitlista för att användas i sådana fall, minskar det avsevärt mängden kod som behöver skrivas:

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

Tanken här är att kontrollera värdet och höja ett fel om det inte är korrekt.



  1. Saker du måste veta om FND_LOBS Table i Oracle Apps

  2. Kopiera en tabell från en databas till en annan i Postgres

  3. MYSQL Välj MAX-datum i ett sammanfogningsmeddelande

  4. Så här skapar du en offline-app för internationalisering:Bygg projektstrukturen