Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menggunakan ORDER BY dengan Parameter dalam Penyata Disediakan PDO dengan Selamat?

Bagaimanakah Saya Boleh Menggunakan ORDER BY dengan Parameter dalam Penyata Disediakan PDO dengan Selamat?

Linda Hamilton
Lepaskan: 2024-12-04 18:32:12
asal
485 orang telah melayarinya

How Can I Safely Use ORDER BY with Parameters in PDO Prepared Statements?

Menggunakan Parameter mengikut Klausa ORDER BY dengan Penyata Disediakan PDO

Dalam PDO, tidak boleh menggunakan parameter dalam klausa ORDER BY secara langsung. Ini boleh membawa kepada potensi kelemahan suntikan SQL.

Apabila menghadapi situasi sedemikian, anda perlu memasukkan klausa ORDER BY terus ke dalam rentetan SQL. Walau bagaimanapun, berhati-hati mesti diambil untuk mengelakkan serangan suntikan SQL.

Contoh:

$order = 'columnName';
$direction = 'ASC';

$query = "SELECT * FROM table WHERE column = :my_param ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->execute();
Salin selepas log masuk

Fungsi Pembantu Penyenaraian Putih:

Untuk mengurangkan potensi risiko, adalah disyorkan untuk menggunakan fungsi pembantu senarai putih untuk mengesahkan bahawa nilai yang disediakan untuk ORDER BY klausa adalah sah. Berikut ialah contoh:

function white_list($value, $allowed_values, $error_message) {
  if (!in_array($value, $allowed_values)) {
    throw new Exception($error_message);
  }
  return $value;
}
Salin selepas log masuk

Menggunakan Fungsi Pembantu:

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$query = "SELECT field FROM table WHERE column = ? ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->execute([$is_live]);
Salin selepas log masuk

Pendekatan ini memastikan bahawa hanya nilai yang dibenarkan dimasukkan dalam klausa ORDER BY, melindungi anda aplikasi daripada input berniat jahat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan ORDER BY dengan Parameter dalam Penyata Disediakan PDO dengan Selamat?. 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