sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo configuro ORDER BY params usando la declaración PDO preparada?

Sí, estás atascado insertándolo directamente en el SQL. Con algunas precauciones, por supuesto. Cada operador/identificador debe estar codificado en su secuencia de comandos, así:

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

Lo mismo para la dirección.

Escribí una función auxiliar de lista blanca para ser utilizado en tales casos, reduce en gran medida la cantidad de código que debe escribirse:

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

La idea aquí es verificar el valor y generar un error en caso de que no sea correcto.