Có, bạn đang gặp khó khăn khi chèn nó trực tiếp trong SQL. Tất nhiên với một số biện pháp phòng ngừa. Mọi toán tử / số nhận dạng phải được mã hóa cứng trong tập lệnh của bạn, như thế này:
$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";
Tương tự cho hướng.
Tôi đã viết một chức năng trợ giúp danh sách trắng được sử dụng trong những trường hợp như vậy, nó làm giảm đáng kể số lượng mã cần phải viết:
$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]);
Ý tưởng ở đây là kiểm tra giá trị và đưa ra lỗi trong trường hợp nó không đúng.