ホームページ > バックエンド開発 > PHPチュートリアル > MySQL の「WHERE ... IN()」句で配列フィルタを使用してプリペアド ステートメントを効率的に使用するにはどうすればよいですか?

MySQL の「WHERE ... IN()」句で配列フィルタを使用してプリペアド ステートメントを効率的に使用するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-16 16:33:11
オリジナル
757 人が閲覧しました

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

配列フィルターを使用した準備済みステートメント: 'WHERE .. IN(..)' クエリ

問題

に基づいて行を取得する次のクエリを考えてみましょう。特定の ID:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
ログイン後にコピー

指定された ID の配列($ids) を取得するには、効率を高めるためにプリペアド ステートメントを使用することをお勧めします。ただし、ループを使用して配列を反復処理し、各 ID を個別にバインドするには、その後で結果を手動で並べ替える必要があります。

解決策

このプロセスを簡素化し、MySQL の順序を維持するために、別のアプローチが存在します。

$ids = array(1,5,18,25);

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results
ログイン後にコピー

このメソッドは、1 回の呼び出しですべての ID をプレースホルダー文字列にバインドし、MySQL がフィルタリングと並べ替えを実行できるようにします。効率的に。

以上がMySQL の「WHERE ... IN()」句で配列フィルタを使用してプリペアド ステートメントを効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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