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
Barbara Streisandasal
2024-12-19 19:45:19381semak imbas

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();

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();

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();

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();

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();

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!

Kenyataan:
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