sql >> Databáze >  >> RDS >> Mysql

Jak nastavím parametry ORDER BY pomocí připraveného příkazu PDO?

Ano, uvízli jste při vkládání přímo do SQL. S určitými opatřeními, samozřejmě. Každý operátor/identifikátor musí být pevně zakódován ve vašem skriptu, takto:

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

Totéž pro směr.

Napsal jsem pomocnou funkci whitelisting pro použití v takových případech výrazně snižuje množství kódu, který je třeba napsat:

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

Cílem je zkontrolovat hodnotu a vyvolat chybu v případě, že není správná.



  1. Jak číst a interpretovat chyby SQL

  2. Vraťte řádek pouze v případě, že hodnota neexistuje

  3. Nové ovladače pro SQL Server… Co potřebujete vědět

  4. SQL Server:Selhání komunikačního spojení Požadováno SSL (nepodařilo se přijmout paket)