Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Mengendalikan Pertanyaan \'WHERE... IN\' dengan PDO Apabila Memadam Berbilang Rekod?

Bagaimana Mengendalikan Pertanyaan \'WHERE... IN\' dengan PDO Apabila Memadam Berbilang Rekod?

DDD
DDDasal
2024-10-29 04:30:02307semak imbas

How to Handle

Mengendalikan Pertanyaan "WHERE... IN" dengan PDO

Apabila menggunakan PDO untuk akses pangkalan data, mengurus pertanyaan dengan "WHERE... Klausa IN" boleh menimbulkan cabaran. Pertimbangkan senario berikut: Anda perlu mengalih keluar masukan daripada jadual pangkalan data berdasarkan senarai item borang yang disemak, diwakili sebagai "$idlist" dengan panjang dan kandungan berubah-ubah (cth., '260,201,221,216,217,169,210,212,213').

>

Pada mulanya menggunakan pertanyaan seperti di bawah mungkin kelihatan logik:

<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";</code>

Walau bagaimanapun, pendekatan ini hanya memadamkan ID pertama. Tanda koma dan ID seterusnya tersilap diabaikan.

Untuk mengatasi isu ini, adalah penting untuk memahami tingkah laku kenyataan yang disediakan dalam PDO. Nilai boleh diikat pada ruang letak menggunakan sama ada parameter bernombor atau dinamakan. Untuk pertanyaan "WHERE... IN", setiap ID dalam senarai harus mempunyai pemegang tempat sendiri.

Penyelesaian memerlukan pendekatan dinamik:

<code class="php">$idlist = array('260', '201', '221', '216', '217', '169', '210', '212', '213');

$questionmarks = str_repeat("?,", count($idlist) - 1) . "?";

$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");</code>

Seterusnya, ikat setiap ID pada tanda soal yang sepadan:

<code class="php">for ($i = 0; $i < count($idlist); $i++) {
    $stmt->bindParam($i + 1, $idlist[$i]);
}</code>

Kaedah ini memastikan setiap item dalam senarai diikat dengan betul pada pemegang tempat, membolehkan pertanyaan berjaya memadamkan rekod yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Pertanyaan \'WHERE... IN\' dengan PDO Apabila Memadam Berbilang Rekod?. 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