Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Memesan Keputusan Pertanyaan Dengan Selamat Menggunakan Penyata Disediakan PDO?

Bagaimanakah Saya Boleh Memesan Keputusan Pertanyaan Dengan Selamat Menggunakan Penyata Disediakan PDO?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 06:03:17857semak imbas

How Can I Securely Order Query Results Using PDO Prepared Statements?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn