Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menggunakan Klausa IN PDO dengan Array dalam PHP dengan Berkesan?

Bagaimanakah Saya Boleh Menggunakan Klausa IN PDO dengan Array dalam PHP dengan Berkesan?

Barbara Streisand
Lepaskan: 2024-12-19 19:45:19
asal
351 orang telah melayarinya

How Can I Effectively Use PDO's IN Clause with Arrays in PHP?

PHP - Menggunakan PDO dengan Tatasusunan Klausa IN

PDO cemerlang dalam melaksanakan kenyataan dengan klausa IN apabila menggunakan tatasusunan untuk nilainya, seperti yang digambarkan dalam kod berikut:

$in_array = [1, 2, 3];
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (?)");
$my_result->execute([$in_values]);
$my_results = $my_result->fetchAll();
Salin selepas log masuk

Walau bagaimanapun, kod berikut menunjukkan yang tidak dijangka tingkah laku:

$in_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([':in_values' => $in_values]);
$my_results = $my_result->fetchAll();
Salin selepas log masuk

Daripada memulangkan semua item yang my_valuenya sepadan dengan nilai dalam $in_array, kod ini hanya mengembalikan item yang my_valuenya sepadan dengan item pertama dalam $in_array.

PDO tidak dilengkapi untuk mengendalikan senario sedemikian dengan berkesan. Untuk menggunakan tatasusunan dalam klausa IN, kita mesti menjana rentetan secara dinamik dengan ruang letak dan memasukkannya ke dalam pertanyaan. Dengan pemegang tempat kedudukan, penyelesaiannya adalah seperti berikut:

$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();
Salin selepas log masuk

Untuk kes dengan berbilang ruang letak, pertimbangkan untuk memanfaatkan array_merge(). Contohnya:

$arr = [1, 2, 3];
$in = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stm = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stm->execute($params);
$data = $stm->fetchAll();
Salin selepas log masuk

Dalam senario dengan ruang letak yang dinamakan, prosesnya lebih rumit, kerana ia melibatkan penjanaan jujukan ruang letak, contohnya, :id0, :id1, :id2.

$ids = [1, 2, 3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

$sql = "SELECT * FROM table WHERE id IN ($in)";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params, $in_params));
$data = $stm->fetchAll();
Salin selepas log masuk

Nasib baik, pemegang tempat yang dinamakan tidak memerlukan susunan yang ketat, membenarkan penggabungan tatasusunan dalam mana-mana turutan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Klausa IN PDO dengan Array dalam PHP dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan