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
Lepaskan: 2024-12-25 07:52:14
asal
585 orang telah melayarinya

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

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan