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