Mysql
 sql >> Database >  >> RDS >> Mysql

Come faccio a impostare i parametri ORDER BY usando l'istruzione PDO preparata?

Sì, sei bloccato a inserirlo direttamente nell'SQL. Con alcune precauzioni, ovviamente. Ogni operatore/identificatore deve essere hardcoded nel tuo script, in questo modo:

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

Idem per la direzione.

Ho scritto una funzione di supporto per la whitelist da utilizzare in questi casi, riduce notevolmente la quantità di codice da scrivere:

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

L'idea qui è di controllare il valore e generare un errore nel caso non sia corretto.