Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Menggunakan PDO dengan betul dengan Klausa IN dan Array dalam PHP?
PDO membolehkan anda melaksanakan pernyataan SQL yang menyertakan klausa IN dengan tatasusunan nilai. Walaupun pendekatan ini berfungsi dengan baik dengan penggabungan rentetan (implode()), ia boleh membawa kepada isu apabila menggunakan ruang letak.
Mengenal pasti Isu
Kod berikut, yang menggunakan pemegang tempat, tidak mengembalikan semua item yang dijangkakan:
$in_array = array(1, 2, 3); $in_values = implode(',', $in_array); $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)"); $my_result->execute(array(':in_values' => $in_values)); $my_results = $my_result->fetchAll();
Kod ini hanya mengembalikan item yang my_valuenya sama dengan elemen pertama dalam $in_array (1), bukan yang lain (2 dan 3).
Penyelesaian untuk Pemegang Tempat Kedudukan
PDO memerlukan mencipta rentetan dengan ruang letak secara dinamik dan memasukkannya ke dalam pertanyaan sambil mengikat nilai tatasusunan seperti biasa. Untuk pemegang tempat kedudukan, penyelesaian ini berfungsi:
$in = str_repeat('?,', count($in_array) - 1) . '?'; $sql = "SELECT * FROM my_table WHERE my_value IN ($in)"; $stm = $db->prepare($sql); $stm->execute($in_array); $data = $stm->fetchAll();
Penyelesaian untuk Pemegang Tempat Dinamakan
Pendekatan untuk pemegang tempat yang dinamakan melibatkan mencipta jujukan pemegang tempat (mis., :id0, :id1, :id2) dan mengumpul nilai ke dalam tatasusunan nilai kunci. Berikut ialah contoh:
$ids = [1,2,3]; $in = ""; $i = 0; foreach ($ids as $item) { $key = ":id" . $i++; $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2 $in_params[$key] = $item; // collecting values into a key-value array } $sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar"; $stm = $db->prepare($sql); $stm->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params)); // merge two arrays $data = $stm->fetchAll();
Dengan mengikuti penyelesaian ini, anda boleh berjaya menggunakan PDO dengan klausa IN yang mengandungi tatasusunan nilai.
Atas ialah kandungan terperinci Bagaimana Menggunakan PDO dengan betul dengan Klausa IN dan Array dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!