PDO 結果セットを最初から繰り返す
MySQL SELECT メソッドから PDO メソッドに移行するとき、配列ポインタをリセットして反復処理する結果セットを複数回実行するのは難しい場合があります。これは、これらのメソッドの配列ポインターの処理方法の違いによるものです。
提供されたコードでは、最初の while ループは、フェッチされた配列を行 0 から開始して正常に反復処理します。ただし、PDO の fetch() メソッドが呼び出しごとに配列ポインタを進めるため、2 番目の while ループは空のセットを返します。
目的の動作を実現するには、結果を配列に格納し、その配列を反復処理します。複数回。以下に例を示します。
$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); $rows = $stmt->fetchAll(); foreach ($rows as $r) { // first run } foreach ($rows as $r) { // second run }
fetchAll() を使用すると、結果セットのすべての行が $rows 配列に保存されます。これにより、配列ポインターを手動でリセットすることなく、配列を複数回反復処理できるようになります。
以上がPDO 結果セットを複数回反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。