PESANAN OLEH Params dalam Penyata PDO
Anda menghadapi kesukaran menggunakan parameter dalam klausa ORDER BY pernyataan SQL anda. Param :order dan :direction gagal menghasilkan sebarang hasil.
Punca Isu
Parameter PDO tidak boleh digunakan terus dalam klausa ORDER BY. Ia mestilah rentetan statik.
Penyelesaian
Tiada pemalar PDO untuk nama lajur atau arah pengisihan. Oleh itu, anda mesti memasukkan nilai ini terus ke dalam pernyataan SQL. Walau bagaimanapun, adalah penting untuk mengambil langkah berjaga-jaga:
$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]);
Penjelasan
Fungsi senarai putih menyemak nilai dan menimbulkan ralat jika ia tidak betul, mengurangkan risiko SQL suntikan serangan.
Contoh
$sql = "SELECT field from table WHERE column = :my_param"; $stmt = $db->prepare($sql); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->bindParam(':order', $order, PDO::PARAM_STR); $stmt->bindParam(':direction', $direction, PDO::PARAM_STR); $stmt->execute();
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Parameter PDO dalam ORDER BY Klausa Pernyataan SQL Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!