Rumah >pembangunan bahagian belakang >tutorial php >Bolehkah PDO Mengendalikan Pengikatan Tatasusunan untuk Pertanyaan Klausa IN()?

Bolehkah PDO Mengendalikan Pengikatan Tatasusunan untuk Pertanyaan Klausa IN()?

DDD
DDDasal
2024-12-25 07:52:14590semak imbas

Can PDO Handle Array Binding for IN() Clause Queries?

Bolehkah Mengikat Tatasusunan kepada Keadaan IN() Dilakukan dengan PDO?

Menggunakan tatasusunan dalam pertanyaan PDO untuk keadaan IN() boleh dicapai dengan membina ruang letak secara manual untuk setiap ahli tatasusunan. Berikut ialah pecahan proses:

$ids       = [1, 2, 3, 7, 8, 9];
$inQuery    = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,?

$stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)");
$stmt->execute($ids);
$data = $stmt->fetchAll();

Bina pembolehubah $inQuery menggunakan str_repeat untuk membuat senarai ruang letak. Ini memastikan setiap ahli tatasusunan mempunyai pemegang tempat yang sepadan.

Pendekatan lain ialah menggabungkan tatasusunan yang mengandungi ruang letak dan nilai yang berkaitan dengannya. Kaedah ini sesuai apabila ruang letak lain wujud dalam pertanyaan.

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

Pemegang tempat yang dinamakan memerlukan pendekatan yang sedikit berbeza, di mana anda mencipta jujukan ruang letak yang sepadan, seperti :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 foo=:foo AND id IN ($in) AND bar=:bar";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge($params, $in_params));
$data = $stmt->fetchAll();

Kaedah ini menyediakan cara yang selamat dan cekap untuk menggunakan tatasusunan dalam keadaan IN() dengan PDO.

Atas ialah kandungan terperinci Bolehkah PDO Mengendalikan Pengikatan Tatasusunan untuk Pertanyaan Klausa IN()?. 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