はい、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]);
ここでの考え方は、値を確認し、正しくない場合にエラーを発生させることです。