Mengendalikan Senarai Pembolehubah Bersaiz Pembolehubah dalam Penyata Disediakan MySQL
Penyata yang disediakan dalam MySQL menawarkan cara yang selamat dan cekap untuk melaksanakan pertanyaan dinamik. Walau bagaimanapun, cabaran timbul apabila menangani pertanyaan yang mengandungi bilangan argumen yang berbeza-beza, seperti klausa IN dengan bilangan nilai yang tidak diketahui.
Penyelesaian 1: Menggunakan Jadual Sementara
Satu pendekatan ialah mencipta jadual sementara dan memasukkan nilai yang dikehendaki ke dalamnya. Pertanyaan kemudiannya boleh bergabung dengan jadual sementara untuk mendapatkan semula data yang berkaitan. Penyelesaian ini mungkin sesuai untuk senarai nilai yang besar.
Penyelesaian 2: Mengeksploitasi Fungsi Implode
Teknik lain melibatkan penggunaan fungsi implode() untuk mencipta klausa IN secara dinamik. Kod PHP berikut menunjukkan cara:
// Define the query with a placeholder IN clause $sql = 'SELECT age, name FROM people WHERE id IN (%s)'; // Get the number of parameters in the IN clause $parmcount = count($parms); // Create a placeholder string for the IN clause (e.g., "?, ?, ?, ?") $inclause = implode(',', array_fill(0, $parmcount, '?')); // Format the query with the dynamic IN clause $preparesql = sprintf($sql, $inclause); // Prepare and execute the statement $st = $dbh->prepare($preparesql); $st->execute($parms);
Perbandingan Penyelesaian
Pendekatan jadual sementara mungkin lebih cekap untuk senarai besar, manakala penyelesaian meletup adalah lebih mudah dan pilihan yang berpotensi lebih pantas untuk senarai yang lebih kecil.
Versi Terse Penyelesaian 2
Bagi mereka yang mencari penyelesaian ringkas:
$st = $dbh->prepare(sprintf('SELECT age, name FROM people WHERE id IN (%s)', implode(',', array_fill(0, count($parms), '?')))); $st->execute($parms);
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Klausa IN Bersaiz Pembolehubah dalam Penyata Disediakan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!