ホームページ > バックエンド開発 > PHPチュートリアル > PHP の mysqli 準備済みステートメントを使用して文字列の配列を MySQL の WHERE IN(?) 句に効率的にバインドする方法

PHP の mysqli 準備済みステートメントを使用して文字列の配列を MySQL の WHERE IN(?) 句に効率的にバインドする方法

Linda Hamilton
リリース: 2024-12-24 01:57:13
オリジナル
949 人が閲覧しました

How to Efficiently Bind an Array of Strings to a MySQL WHERE IN(?) Clause Using PHP's mysqli Prepared Statements?

文字列の配列を WHERE IN(?) 句にバインド

値の配列を WHERE IN(?) 句にバインドは一般的な MySQL タスクです。 PHP の mysqli プリペアド ステートメントを使用する場合、bind_param() 関数の制限や微妙な違いに慣れていないと、達成するのが難しい場合があります。

問題

bind_param() を使用して値の配列を IN(?) 句にバインドしようとすると問題が発生し、失敗する場合があります。

解決策

使用している PHP のバージョンに応じて、このタスクに取り組むさまざまな方法があります。

PHP 8.2 および上記

  • execute_query() 関数: この関数を使用すると、値の配列を IN(?) に直接渡すことができます。これにより、プロセスが 1 行のコードで簡素化されます。

PHP 8.1

  • execute(): PHP 8.1 では、準備されたステートメントのexecute() に配列を直接渡すことができるため、複数の値をバインドします。

以前の PHP バージョン

古いバージョンの場合は、より複雑なアプローチが必要です。

    配列内の要素の数と同じ数の疑問符 (?) を含む文字列。
  1. 文字列を追加します。
  2. str_repeat() を使用して型文字列を作成し、データを正しい型 (文字列の 's' など) にバインドします。
  3. 配列要素をbind_param() の引数解凍演算子 (...) を使用したステートメント。
  4. ステートメントを実行し、結果を取得します。 data.

コード例

以前の PHP バージョンのアプローチを使用した例を次に示します。

$array = ['Nashville', 'Knoxville'];
$in = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql); // prepare
$types = str_repeat('s', count($array)); // types
$stmt->bind_param($types, ...$array); // bind array at once
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);
ログイン後にコピー
これらのアプローチを理解することで、 mysqli プリペアドステートメントを使用して、文字列の配列を WHERE IN(?) 句に効率的にバインドし、確実に実行できるようにすることができます。クエリ。

以上がPHP の mysqli 準備済みステートメントを使用して文字列の配列を MySQL の WHERE IN(?) 句に効率的にバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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