Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Saya Tidak Boleh Menggunakan Parameter PDO dalam ORDER BY Klausa Pernyataan SQL Saya?

Mengapa Saya Tidak Boleh Menggunakan Parameter PDO dalam ORDER BY Klausa Pernyataan SQL Saya?

DDD
Lepaskan: 2024-12-27 01:39:09
asal
948 orang telah melayarinya

Why Can't I Use PDO Parameters in the ORDER BY Clause of My SQL Statement?

PESANAN OLEH Params dalam Penyata PDO

Anda menghadapi kesukaran menggunakan parameter dalam klausa ORDER BY pernyataan SQL anda. Param :order dan :direction gagal menghasilkan sebarang hasil.

Punca Isu

Parameter PDO tidak boleh digunakan terus dalam klausa ORDER BY. Ia mestilah rentetan statik.

Penyelesaian

Tiada pemalar PDO untuk nama lajur atau arah pengisihan. Oleh itu, anda mesti memasukkan nilai ini terus ke dalam pernyataan SQL. Walau bagaimanapun, adalah penting untuk mengambil langkah berjaga-jaga:

  1. Kod keras setiap pengendali dan pengecam dalam skrip anda.
$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
  1. Gunakan pembantu senarai putih fungsi:
$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";
$stmt = $db->prepare($sql);
$stmt->execute([$is_live]);
Salin selepas log masuk

Penjelasan

Fungsi senarai putih menyemak nilai dan menimbulkan ralat jika ia tidak betul, mengurangkan risiko SQL suntikan serangan.

Contoh

$sql = "SELECT field from table WHERE column = :my_param";

$stmt = $db->prepare($sql);
$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

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Parameter PDO dalam ORDER BY Klausa Pernyataan SQL Saya?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan