WHERE ... IN(...) クエリに MySQL プリペアド ステートメントで配列を使用する
プリペアド ステートメントを使用してデータベースにクエリを実行する場合、パフォーマンスを向上させるために、単一のステートメントを準備して複数回実行することをお勧めします。ただし、WHERE ... IN(...) クエリの ID 配列を扱う場合、実行後に結果を手動で並べ替えるのは非効率的になる可能性があります。
別のアプローチとして、配列の長さに基づくプレースホルダー (?) のカンマ区切りのリスト。次の例を考えてみましょう:
$ids = array(1,5,18,25); // Create a string containing ?,?,? $clause = implode(',', array_fill(0, count($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(); // Loop through results
このアプローチでは、implode(...) は必要な数のプレースホルダーを含む文字列を作成します。次に、call_user_func_array(...) 関数は、$ids 配列の値をプレースホルダーにバインドします。この手法を使用すると、MySQL の組み込み並べ替え機能を使用して結果を並べ替えることができるため、手動で並べ替える必要がなくなります。
以上がWHERE ... IN() 句の MySQL プリペアド ステートメントで配列を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。