ホームページ >バックエンド開発 >PHPチュートリアル >文字列の配列を MySQLi の WHERE IN 句にバインドするにはどうすればよいですか?

文字列の配列を MySQLi の WHERE IN 句にバインドするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-01 14:06:12531ブラウズ

How to Bind an Array of Strings to a MySQLi WHERE IN Clause?

MySQLi プリペアド ステートメントを使用した WHERE IN 句の文字列の配列のバインド

次を使用して値の配列を WHERE IN 句にバインドしようとすると、問題が発生する可能性があります。 MySQLi。よくあるエラーの 1 つは、bind_param の使用方法が間違っていることです。この問題を解決する方法は次のとおりです:

PHP 8.2 以降: Execute_query()

PHP 8.2 では、execute_query() 関数が導入され、複数のプリペアド ステートメントを簡単に実行できるようになりました。

例:

$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);

PHP 8.1: 配列をexecute()に渡す

PHP 8.1の場合、配列を直接に渡すことができます。 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);

古い PHP バージョン:準備/バインド/実行

古いバージョンの場合は、次のアプローチを使用します:

$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);

以上が文字列の配列を MySQLi の WHERE IN 句にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。