Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengikat Nilai Array dengan betul ke Penyata MySQL IN menggunakan PDO?
Nilai Mengikat PDO untuk Penyata MySQL IN
Apabila bekerja dengan PDO, mengikat tatasusunan nilai pada pernyataan MySQL IN boleh membawa kepada perkara yang tidak dijangka tingkah laku. Secara lalai, PDO akan menganggap nilai terikat sebagai rentetan tunggal, menghasilkan pertanyaan yang menggunakan pernyataan IN terhadap keseluruhan rentetan dan bukannya nilai individu.
Isu:
Untuk menggambarkan isu ini, pertimbangkan kod berikut:
// Array of values $values = array(1, 2, 3, 4, 5, 6, 7, 8); // Database-safe variable $products = implode(',', $values); // PDO statement $stmt = $conn->prepare("SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN (:products)"); // Bind the values $stmt->bindParam(':products', $products);
Dalam kes ini, pertanyaan yang terhasil akan be:
SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN ('1,2,3,4,5,6,7,8')
Pertanyaan ini berkesan akan merawat keseluruhan rentetan sebagai satu syarat, yang bukan tingkah laku yang dimaksudkan.
Penyelesaian:
Untuk menyelesaikan isu ini, terdapat beberapa pilihan yang tersedia:
SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE find_in_set(cast(products.id as char), :products)
Pendekatan ini memerlukan penghantaran nilai kepada jenis aksara, yang boleh memberi kesan kepada prestasi untuk set data yang besar.
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Mengikat Nilai Array dengan betul ke Penyata MySQL IN menggunakan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!