Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menggunakan Pernyataan Disediakan dengan Cekap dengan Penapis Tatasusunan dalam Klausa `WHERE ... IN()` MySQL?

Bagaimanakah Saya Boleh Menggunakan Pernyataan Disediakan dengan Cekap dengan Penapis Tatasusunan dalam Klausa `WHERE ... IN()` MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 16:33:11831semak imbas

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

Pernyataan Disediakan dengan Penapis Tatasusunan: Pertanyaan 'WHERE .. IN(..)'

Masalah

Pertimbangkan pertanyaan berikut yang mendapatkan semula baris berdasarkan pada ID tertentu:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

Diberikan pelbagai ID ($id) untuk diambil, adalah disyorkan untuk menggunakan pernyataan yang disediakan untuk kecekapan. Walau bagaimanapun, menggunakan gelung untuk mengulang tatasusunan dan mengikat setiap ID secara berasingan memerlukan pengisihan hasil manual berikutnya.

Penyelesaian

Untuk memudahkan proses ini dan mengekalkan susunan MySQL, pendekatan alternatif wujud:

$ids = array(1,5,18,25);

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results

Kaedah ini mengikat semua ID pada rentetan pemegang tempat dalam satu panggilan, membolehkan MySQL melakukan penapisan dan pengisihan cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Pernyataan Disediakan dengan Cekap dengan Penapis Tatasusunan dalam Klausa `WHERE ... IN()` MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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