Penyata Disediakan PDO: Menetapkan ORDER BY Parameter
Apabila bekerja dengan pernyataan SQL dalam PHP menggunakan pernyataan yang disediakan PDO, tetapkan parameter dalam ORDER BY klausa boleh menjadi rumit. Tidak seperti parameter lain, yang boleh diikat menggunakan kaedah seperti bindParam(), PDO tidak menyediakan cara langsung untuk menentukan parameter untuk ORDER BY.
Untuk menyelesaikannya, perlu memasukkan nilai pesanan dan arah secara terus ke dalam rentetan SQL. Walau bagaimanapun, pendekatan ini berpotensi untuk memperkenalkan kelemahan suntikan SQL jika input pengguna tidak dibersihkan dengan betul.
Pendekatan Berhati-hati
Kaedah yang paling selamat ialah mengekod keras ORDER BY kriteria ke dalam rentetan SQL, seperti:
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT field 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();
Pembantu Tersuai Fungsi
Pendekatan alternatif ialah mencipta fungsi pembantu tersuai yang menyenarai putih nilai yang boleh diterima untuk parameter ORDER BY. Ini memastikan bahawa hanya nilai yang sah digunakan dan mengurangkan risiko suntikan SQL.
function white_list($value, array $whitelist, $errorMessage) { if (!in_array($value, $whitelist)) { throw new Exception($errorMessage); } return $value; } $order = white_list($_GET['sort'], ["name", "price", "qty"], "Invalid field name"); $direction = white_list($_GET['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]);
Fungsi pembantu ini mengesahkan kesahihan parameter ORDER BY dan membuang pengecualian jika nilai yang tidak sah dikesan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan ORDER BY Parameter dengan Penyata Disediakan PDO dalam PHP dengan Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!