Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Memesan Keputusan Pertanyaan Dengan Selamat Menggunakan Penyata Disediakan PDO?
Pertanyaan Tertib dengan Penyata Disediakan PDO
Dalam interaksi pangkalan data, memesan hasil pertanyaan adalah tugas biasa. Menggunakan pernyataan PDO yang disediakan dengan parameter membolehkan sisipan selamat parameter pesanan. Walau bagaimanapun, kesukaran mungkin timbul apabila cuba menggunakan parameter dalam klausa ORDER BY.
Pertanyaan berikut menunjukkan penggunaan parameter untuk klausa WHERE tetapi gagal menggunakan pesanan:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction"); $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();
The parameter :my_param, :order, dan :direction diikat menggunakan penanda parameter. Walau bagaimanapun, klausa pesanan gagal berfungsi dengan betul. Seseorang mungkin menjangkakan mekanisme pelarian untuk parameter dalam klausa ORDER BY, tetapi ini tidak wujud.
Sebaliknya, adalah perlu untuk memasukkan parameter pesanan terus dalam pernyataan SQL, dengan langkah berjaga-jaga yang betul:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Untuk memastikan keselamatan, amalan nilai senarai putih untuk parameter pesanan disyorkan. Coretan kod berikut menggambarkan mekanisme penyenaraian putih menggunakan tatasusunan:
$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";
Pendekatan ini memastikan bahawa hanya nilai yang dipratentukan dan selamat boleh digunakan untuk membuat pesanan, menghalang potensi kelemahan keselamatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memesan Keputusan Pertanyaan Dengan Selamat Menggunakan Penyata Disediakan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!