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

文字列の配列を MySQLi プリペアドステートメントの IN 句に効率的にバインドするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-24 15:50:11
オリジナル
526 人が閲覧しました

How to Efficiently Bind an Array of Strings to a MySQLi Prepared Statement's IN Clause?

IN 句に対する MySQLi プリペアド ステートメントの文字列の配列のバインド

データベース対話の領域では、次のような状況が発生することがあります。文字列値の配列を MySQLi プリペアドステートメント内の WHERE IN (?) 句にバインドする必要があります。この記事では、基礎となる原則を詳しく掘り下げ、特に PHP バージョン 8.2、8.1、およびそれ以前のバージョンに焦点を当てた洗練されたソリューションを提供します。

PHP 8.2: 簡略化されたアプローチ

PHP 8.2 で導入されたexecute_query() 関数は、データが入力されたプリペアド ステートメントを実行するプロセスを合理化します。配列。例:

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

動的なプレースホルダー数が関係する場合、str_repeat() を使用してプレースホルダーを動的に構築できます:

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

PHP 8.1: Direct Array Execution

PHP 8.1 以降では、プリペアドステートメントを配列に直接使用し、明示的なバインディングの必要性を排除します:

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

以前のバージョン: Komplexity の採用

PHP 8.1 より前のバージョンの場合、プロシージャこれはもう少し複雑です:

  • str_repeat() を使用して配列内の要素と同じ数の疑問符を追加します。
  • このプレースホルダー文字列をクエリに追加します。
  • 従来どおりクエリを準備します。
  • 型文字列を構築しますbind_param() の場合は str_repeat() を使用し、通常は文字列に「s」を使用します。
  • 引数アンパック演算子を使用します。 (...) 配列値をまとめてバインドします。
  • クエリを実行し、結果を取得します。

例:

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

少し冗長ではありますが、このコードは他のアプローチと比較して簡潔な解決策を提供します。

結論として、 MySQLi のプリペアド ステートメントで文字列の配列を IN 句にバインドするには、さまざまな PHP バージョンに合わせたいくつかのメソッドが必要です。この記事で説明されている手法を活用すると、データベース操作でこれらのクエリを効果的に実行できます。

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

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