• ベストアンサー
  • 困ってます

配列に入った変数を二度使いたい

  • 質問No.1263465
  • 閲覧数82
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 15% (12/80)

perlでDBデータをセレクトし表示させるプログラムで
以下のように一回目のforループでは正常に表示されます。

二度目に表示させようとすると何もデータがなくなっているようです。
print でも、もちろんなにも表示しません。

配列名を変えてもだめでした。とこが原因なのかわかりません。
ステートメントハンドルとかが関係あるのでしょうか?

いろいろ調べたのですが、ちょっとわかりませんでした。
申し訳ないのですが、教えてください。

話をまとめるとDBからセレクトした同じ行のデータを2回表示させたいということです。
よろしくお願いします。


my $db = DBI->connect("DBI:Pg:dbname=$UDBNAME",$USERNAME,$USERPASS);
my $sth=$db->prepare(" select * from server where no = $no ");
$sth->execute;

#一回目

for ((my $count)=0; $count<$num_rows;$count++){
my @ar=$sth->fetchrow_array;

#二回目

for ((my $count)=0; $count<$num_rows;$count++){
my @ar=$sth->fetchrow_array;

質問者が選んだベストアンサー

  • 回答No.3
  • ベストアンサー

ベストアンサー率 55% (526/942)

例えば、2要素をキーとする連想配列に貯めるとすると..
(未検証ですが)

my $db = DBI->connect("DBI:Pg:dbname=$UDBNAME",$USERNAME,$USERPASS);
my $sth=$db->prepare(" select * from server where no = $no ");
$sth->execute;

while(@ar=$sth->fetchrow_array)
{
if($count>=$num_rows){last;}
for(0 .. $#ar){$X{$count,$_}=$ar[$_];}
$count++;
}

print "例えば、3件目の第2フィールドは、",$X{2,1},"\n";

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 55% (526/942)

$sth->fetchrow_arrayを2回呼び出すと言うことは、データベースから
”2回読み出す”ことになりますが、それでよろしいですか?

普通は、データベースから読み出す行為は、処理時間がかかるので行いません。

もし、その辺の課題を理解した上で、2回読み出したいのであれば、
$sth->execute;
を、もう一度処理してください。その後、fetchrow_arrayが動作できます。

一般的には、効率を優先し、自分の配列に一度蓄えた後、複数回利用するのが
多いと思います。
お礼コメント
gahau

お礼率 15% (12/80)

ご回答ありがとうございます。
もしよろしければ
一般的には、効率を優先し、自分の配列に一度蓄えた後、複数回利用するのが
多いと思います。 のサンプルを教えていただけませんか?

よろしくお願いします。
投稿日時:2005/03/14 10:03
  • 回答No.1

ベストアンサー率 32% (598/1831)

DBから直接処理した配列は一回使用すると消えてしまうみたいですねー。

もう一回Selectするか、
一回目のforの時に別の配列に入れるしかないのかもしれないです。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

ピックアップ

ページ先頭へ