Pertanyaan PDO dengan Klausa "WHERE... IN"
Apabila bekerja dengan PDO PHP untuk akses pangkalan data, membina "WHERE... Pertanyaan IN" boleh mencabar. Dalam kes ini, matlamatnya ialah untuk memadamkan rekod daripada jadual berdasarkan senarai ID yang diperoleh daripada borang.
Pertanyaan Asal
<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));</code>
Masalah
Pertanyaan ini hanya memadamkan ID pertama dalam senarai, membuang baki ID kerana pemisah koma.
Penyelesaian Menggunakan Tanda Soalan
Memandangkan pernyataan yang disediakan tidak boleh mencampurkan nilai dengan logik aliran kawalan (koma), adalah perlu untuk menggunakan satu pemegang tempat bagi setiap nilai dalam senarai. Ini dicapai dengan mencipta rentetan tanda soal yang dipisahkan koma dan mengikat ID individu kepada mereka.
<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)"); foreach ($idlist as $id) { $stmt->bindParam($id); }</code>
Pendekatan ini memerlukan gelung melalui senarai untuk mengikat setiap ID secara berurutan, memastikan semua rekod dipadamkan sebagai dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Memadam Rekod dengan Berkesan dengan Klausa \'WHERE... IN\' dalam Pertanyaan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!