Menggunakan Penyata PDO Disediakan untuk Menetapkan ORDER BY Parameter
Apabila menggunakan pernyataan PDO yang disediakan untuk melaksanakan pertanyaan SQL, kesukaran mungkin timbul apabila cuba menetapkan parameter dalam klausa ORDER BY. Artikel ini menangani isu ini dengan meneroka had dan menyediakan penyelesaian alternatif.
Sisipan SQL Terus
Semasa menggunakan param dalam klausa WHERE berfungsi, gunakannya pada ORDER BY klausa terbukti bermasalah. Untuk memintas had ini, penyisipan terus ke dalam pertanyaan SQL diperlukan. Walau bagaimanapun, pendekatan ini memerlukan langkah berjaga-jaga yang ketat untuk memastikan keselamatan dan integriti pertanyaan, seperti yang dilihat di bawah:
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";
Operator Pengekodan Keras dan Pengecam
Setiap operator dan pengecam dalam klausa ORDER BY mesti dikod keras dalam skrip, seperti yang ditunjukkan di sini:
$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";
Prinsip yang sama terpakai pada arah.
Fungsi Pembantu untuk Penyenaraian Putih
Untuk meminimumkan jumlah kod yang diperlukan, a fungsi pembantu senarai putih boleh digunakan:
$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";
Fungsi ini menyemak nilai dan mencetuskan ralat jika ia tidak sah. Teknik ini memastikan pengesahan dan keselamatan data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penyata Disediakan dengan Selamat dengan Parameter ORDER BY Klausa dalam PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!