PDO 結果内の配列ポインタのリセット
MySQL から PDO メソッドへの移行では、フェッチされたメソッドを反復しようとすると課題が発生する可能性があります。配列を 2 回、毎回行 0 から開始します。解決策は、2 つの方法のアプローチの違いを理解することにあります。
MySQL フレームワークでは、mysql_data_seek 関数は、結果の配列内の特定の位置に行ポインターを巻き戻します。ただし、PDO では、この機能は直接利用できません。代わりに、2 つの代替手法を使用して、目的の結果を達成できます。
結果を配列に保存する
最初のアプローチでは、例で示したように、結果を配列に保存します。以下のコード スニペットでは:
$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 = 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); while($row = $stmt->fetch()) { // first run } $stmt->execute(); //re-execute the query while($row = $stmt->fetch()) { // second run }
クエリを再実行すると、行から始まるポインタを持つ新しい結果セットが生成されます。ゼロ。このアプローチにより、両方の反復で完全なデータセットに確実にアクセスできるようになります。
以上が複数回の反復で PDO 結果の配列ポインタをリセットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。