に基づいて行を取得する次のクエリを考えてみましょう。特定の 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 サイトの他の関連記事を参照してください。