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

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

Mary-Kate Olsen
リリース: 2024-12-25 22:05:13
オリジナル
370 人が閲覧しました

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

MySQLi を使用した WHERE IN (?) 句の文字列の配列のバインド

MySQLi のプリペアド ステートメントを使用する場合は、次のことを理解することが重要です値の配列を WHERE IN (?) 句にバインドする方法。この記事は、この問題を効果的に解決するための包括的なガイドを提供します。

課題

目標は、都市名の配列を動的に WHERE IN 句にバインドすることです。 MySQLi の準備済みステートメント。ただし、配列のバインドが正しくないため、提供されたコードは最初は実行に失敗します。

文字列の配列のバインド

文字列の配列をバインドするには、いくつかの方法が存在します。利用可能なメソッドを見てみましょう:

1. execute_query() 関数 (PHP 8.2)

最も簡単なソリューションは、execute_query() 関数の導入により PHP 8.2 で利用可能です。このメソッドを使用すると、SQL ステートメントとバインドされる値の配列の両方を一度に渡すことができます。

$array = ['Nashville', 'Knoxville'];
$parameters = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($parameters)";
$result = $mysqli->execute_query($sql, $array);
ログイン後にコピー

2.配列をexecute()に渡す (PHP 8.1)

PHP 8.1では、プレースホルダーやバインディングを必要とせずに、配列をexecute() メソッドに直接渡すことができます。

$stmt = $mysqli->prepare($sql);
$stmt->execute($array);
ログイン後にコピー

3.古いバージョンの準備/バインド/実行

PHP 8.1 より前のバージョンの場合は、次の手順が必要です。

  • プレースホルダーの文字列 (例: "?, ?" 2 つの値の配列)。
  • この文字列をクエリ。
  • ステートメントを準備します。
  • 型の文字列を作成します (例: 2 つの文字列値の場合は「ss」)。
  • 引数のアンパックを使用して配列値をバインドします。演算子。
$types = str_repeat('s', count($array));
$stmt->bind_param($types, ...$array);
ログイン後にコピー

例:

$array = ['Nashville', 'Knoxville'];
$in = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param(str_repeat('s', count($array)), ...$array);
$stmt->execute();
$result = $stmt->get_result();
ログイン後にコピー

これらのアプローチに従って、文字列の配列を WHERE IN (? MySQLi プリペアド ステートメントの ) 句。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート