Rumah > pangkalan data > tutorial mysql > Bagaimana Menggunakan Penyata Disediakan MySQLi dengan Operator IN dengan Berkesan?

Bagaimana Menggunakan Penyata Disediakan MySQLi dengan Operator IN dengan Berkesan?

Mary-Kate Olsen
Lepaskan: 2024-12-27 00:12:10
asal
384 orang telah melayarinya

How to Use MySQLi Prepared Statements with the IN Operator Effectively?

MySQLi Disediakan Penyata dengan IN Operator

Penyata yang disediakan menawarkan keselamatan dan prestasi yang dipertingkatkan berbanding pertanyaan tradisional dengan membenarkan anda menentukan nilai parameter secara berasingan daripada kenyataan itu sendiri. Walau bagaimanapun, apabila menggunakan pernyataan yang disediakan dengan pengendali IN, anda mungkin menghadapi masalah jika pendekatan anda tidak betul.

Masalahnya

Seperti yang dinyatakan dalam permulaan pertanyaan, mengikat rentetan nilai yang dipisahkan koma pada pernyataan yang disediakan menggunakan bind_param('s', $in_statement) tidak akan menghasilkan hasil, walaupun data wujud dalam pangkalan data.

Penyelesaian

Penyelesaian terletak pada merawat setiap nilai parameter secara individu:

  1. Buat tatasusunan dengan kekunci bernombor dan hantar nilai kepadanya secara eksplisit melalui rujukan.
  2. Kira bilangan parameter dan buat rentetan dengan yang sesuai bilangan aksara i, mewakili jenis datanya.
  3. Gabungkan rentetan jenis data dengan tatasusunan tanda soal untuk membentuk rentetan parameter bagi pernyataan yang disediakan.
  4. Nyah anjakan rentetan jenis data ke dalam tatasusunan nilai parameter.
  5. Gunakan call_user_func_array untuk mengikat tatasusunan nilai parameter kepada yang disediakan pernyataan.

Kod Contoh

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

foreach ($lastnames as $key => $value) {
    $arParams[] = &$lastnames[$key];
}

$count_params = count($arParams);
$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();
Salin selepas log masuk

Pendekatan ini membolehkan anda mengikat berbilang nilai dengan betul pada pernyataan yang disediakan menggunakan operator IN.

Atas ialah kandungan terperinci Bagaimana Menggunakan Penyata Disediakan MySQLi dengan Operator IN 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