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
Lepaskan: 2024-12-07 06:03:17
asal
831 orang telah melayarinya

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();
Salin selepas log masuk

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");
Salin selepas log masuk

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";
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan