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();
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; }
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]);
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!