हां, आप इसे सीधे 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]);
यहाँ विचार यह है कि मूल्य की जाँच की जाए और सही न होने की स्थिति में त्रुटि उत्पन्न की जाए।