Dalam usaha untuk meningkatkan akses pangkalan data dengan PDO, banyak pembangun menghadapi cabaran, terutamanya dengan "WHERE... IN" pertanyaan. Mari kita mendalami selok-belok dan temui pendekatan yang betul untuk menggunakan senarai item dalam pernyataan yang disediakan oleh PDO.
Pertimbangkan senario di mana anda perlu padam item daripada pangkalan data berdasarkan senarai item yang disemak daripada borang. Setiap item mempunyai ID yang sepadan, yang biasanya akan disimpan dalam tatasusunan. Pertanyaan "WHERE... IN" konvensional akan kelihatan seperti ini:
$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));
Walau bagaimanapun, pendekatan ini selalunya menyebabkan hanya ID pertama dipadamkan. Ini kerana PDO mentafsir senarai yang dipisahkan koma sebagai satu nilai, oleh itu mengabaikan ID berikutnya.
Untuk memintas isu ini, seseorang mesti memanfaatkan ruang letak dan mengikat parameter. Pendekatan ini melibatkan menggantikan keseluruhan senarai yang dipisahkan koma dengan pemegang tempat individu (tanda soal) dan menggelung melalui tatasusunan untuk mengikat setiap ID kepada pemegang tempat. Begini cara anda mencapai matlamat ini:
$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(1, $id); }
Pendekatan yang disemak ini memastikan setiap ID dianggap sebagai parameter yang berasingan, dengan itu membolehkan pelaksanaan pertanyaan yang tepat.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pertanyaan PDO dengan \'WHERE... IN\' Menggunakan Pemegang Tempat dan Parameter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!