取り出したクエリデータのコピー


$sql="SELECT * FROM table";
$res=$pdo->query($sql);

$res2= clone $res;//コピー

//ループ
while($any_data=$res->fetch(PDO::FETCH_ASSOC))
{
echo $any_data[0];
}

//$res2コピーでループ
while($any_data2=$res2->fetch(PDO::FETCH_ASSOC))
{
echo $any_data2[0];
}

データベースへのアクセス回数を減らそうと上記の様に
$res2= clone $res;//コピー
を行い、ループを行ったのですが、コピー文の結果が出ません。

どこが間違っているのでしょうか?
また、他の方法で実現する方法があれば教えてください。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/04/09 14:01:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント65pt

どこが間違っているのでしょうか?

メソッドの名前から query でデータベースの検索をして、その戻り値には検索結果が入っている、と思いがちですが、実際には fetch でデータベースのアクセスをしています。
なので clone しても、検索結果を複製したことにはなりません。
fetch をする度に、データベースのカーソルが次の条件を満たすレコードを指すように動いていきます。

また、他の方法で実現する方法があれば教えてください。

最初に結果を全て配列に取り込んで置いて、それぞれの処理ではその配列を使って処理をするようにします。
fetch でループを回して、自分で用意した配列に追加していくか、fetchAll を使って、一気に取り込みます。
 PHP: PDOStatement::fetchAll - Manual

fetchAll は何通りかの使い方があるので、”php query fetchAll” みたいな感じでググってみてください。

id:jamis

回答ありがとうございます。
fetchで1回1回取りにいってるんですね。それなら謎が解けました(・∀・)

2015/04/09 14:00:35

その他の回答2件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント30pt

データベースへのアクセスを一回にするなら、配列に一旦格納して、それを参照ですね。
$anydata = array();
で初期化して、
whileループ内で、
$anydata[] = $any_data[0];
で格納できますね。

id:jamis

回答ありがとうございます。

2015/04/09 14:00:30
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント65pt

どこが間違っているのでしょうか?

メソッドの名前から query でデータベースの検索をして、その戻り値には検索結果が入っている、と思いがちですが、実際には fetch でデータベースのアクセスをしています。
なので clone しても、検索結果を複製したことにはなりません。
fetch をする度に、データベースのカーソルが次の条件を満たすレコードを指すように動いていきます。

また、他の方法で実現する方法があれば教えてください。

最初に結果を全て配列に取り込んで置いて、それぞれの処理ではその配列を使って処理をするようにします。
fetch でループを回して、自分で用意した配列に追加していくか、fetchAll を使って、一気に取り込みます。
 PHP: PDOStatement::fetchAll - Manual

fetchAll は何通りかの使い方があるので、”php query fetchAll” みたいな感じでググってみてください。

id:jamis

回答ありがとうございます。
fetchで1回1回取りにいってるんですね。それなら謎が解けました(・∀・)

2015/04/09 14:00:35
id:taknt No.3

回答回数13539ベストアンサー獲得回数1198

ポイント5pt

http://funini.com/kei/java/clone.shtml

内容もコピーしないとダメでは?

他1件のコメントを見る
id:taknt

ふむふむ

2015/04/09 13:02:43
id:jamis

回答ありがとうございます。

2015/04/09 14:00:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません