ホームページ >バックエンド開発 >PHPチュートリアル >配列とプリペアドステートメントを使用して MySQL の「WHERE ... IN(...)」クエリを最適化するにはどうすればよいですか?
「WHERE ... IN(...)」クエリに対する MySQL プリペアド ステートメントでの配列の使用
データベース クエリで、IN を使用するステートメントは、データベースへの呼び出し数を減らすことでパフォーマンスを最適化できます。これは、大規模なデータセットを操作する場合に特に便利です。次のようなクエリを想像してください。
SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
$ids = array(1,5,18,25) など、取得する ID の配列がある場合は、プリペアド ステートメントの使用を検討するとよいでしょう。準備されたステートメントは SQL インジェクション攻撃を防止し、パフォーマンスを向上させます。単一の ID でプリペアド ステートメントを使用する例を次に示します。
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;'); foreach ($ids as $id){ $stmt->bind_params('i', $id); $stmt->exec(); }
ただし、このアプローチでは、結果を手動で並べ替える必要があります。代わりに、プレースホルダー (?) を含む文字列を作成し、implode() 関数を使用してそれらをカンマで区切ることにより、より効率的な代替手段を使用できます。
$clause = implode(',', array_fill(0, count($ids), '?'));
次に、句を含むステートメントを準備してバインドします。 call_user_func_array() を使用した $ids 配列。
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;'); call_user_func_array(array($stmt, 'bind_param'), $ids); $stmt->execute();
このアプローチにより、MySQL はソートを効率的に処理できるようになり、時間を節約し、努力。
以上が配列とプリペアドステートメントを使用して MySQL の「WHERE ... IN(...)」クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。