Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да задам параметри ORDER BY, използвайки подготвен PDO израз?

Да, вие сте останали да го вмъкнете директно в SQL. С някои предпазни мерки, разбира се. Всеки оператор/идентификатор трябва да бъде твърдо кодиран във вашия скрипт, както следва:

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

Същото и за посоката.

Написах помощна функция за белия списък за да се използва в такива случаи, значително намалява количеството код, който трябва да бъде написан:

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

Идеята тук е да проверите стойността и да повдигнете грешка, в случай че не е правилна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql разлика между две времеви марки в дни?

  2. LAST_INSERT_ID() MySQL

  3. Как мога да вмъкна много редове в MySQL таблица и да върна новите идентификатори?

  4. Инсталирайте MySQL на Ubuntu без подкана за парола

  5. Извършване на промени в множество записи въз основа на промяна на един запис с SQL