Anda boleh menghadapi cabaran apabila cuba mengikat tatasusunan nilai ke klausa WHERE IN menggunakan MySQLi. Satu ralat biasa ialah menggunakan bind_param dengan salah. Begini cara untuk menyelesaikan isu ini:
PHP 8.2 memperkenalkan fungsi execute_query(), yang menjadikannya mudah untuk melaksanakan pernyataan yang disediakan dengan berbilang nilai.
Contoh:
$mysqli = new mysqli("localhost", "root", "root", "db"); $array = ['Nashville','Knoxville']; $parameters = str_repeat('?,', count($array) - 1) . '?'; $sql = "SELECT name FROM table WHERE city IN ($parameters)"; $result = $mysqli->execute_query($sql, $array); $data = $result->fetch_all(MYSQLI_ASSOC);
Untuk PHP 8.1, anda boleh menghantar tatasusunan terus ke execute():
$mysqli = new mysqli("localhost", "root", "root", "db"); $array = ['Nashville','Knoxville']; $sql = "SELECT name FROM table WHERE city IN (".str_repeat('?,', count($array) - 1) . '?)'; $stmt = $mysqli->prepare($sql); $stmt->execute($array); $result = $stmt->get_result(); $data = $result->fetch_all(MYSQLI_ASSOC);
Untuk versi lama, gunakan pendekatan berikut:
$mysqli = new mysqli("localhost", "root", "root", "db"); $array = ['Nashville','Knoxville']; $in = str_repeat('?,', count($array) - 1) . '?'; $sql = "SELECT name FROM table WHERE city IN ($in)"; $types = str_repeat('s', count($array)); $stmt = $mysqli->prepare($sql); $stmt->bind_param($types, ...$array); $stmt->execute(); $result = $stmt->get_result(); $data = $result->fetch_all(MYSQLI_ASSOC);
Atas ialah kandungan terperinci Bagaimana untuk Mengikat Susunan Rentetan ke MySQLi WHERE IN Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!