• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列に入った変数を二度使いたい)

perlでDBデータをセレクトし表示させるプログラムで二度目の表示ができない

このQ&Aのポイント
  • perlでDBデータをセレクトし表示させるプログラムで、一度目の表示は正常に行えますが、二度目の表示ができません。何もデータが表示されないため、配列名の変更なども試しましたがうまくいきません。ステートメントハンドルなどが関係している可能性があります。調査した結果、情報が得られず困っています。教えていただけると幸いです。
  • perlのプログラムで、DBデータを取得して表示する際に、一度目の表示は正常に行えますが、二度目の表示ができません。配列名の変更やその他の方法を試しましたが、うまくいきませんでした。ステートメントハンドルなどが関係しているのかもしれませんが、具体的な原因がわかりません。調査を行いましたが、理解できる情報が得られませんでした。お力をお貸しください。
  • perlで作成したプログラムで、DBからデータを取得して表示する際に、一度目の表示は成功しますが、二度目の表示では何も表示されません。配列名を変更するなど試しましたが、解決しませんでした。ステートメントハンドルなどが関係している可能性がありますが、具体的な原因がわかりません。調査した結果、理解できる情報が見つからず困っています。ご教示いただければ幸いです。

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

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

例えば、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

$sth->fetchrow_arrayを2回呼び出すと言うことは、データベースから ”2回読み出す”ことになりますが、それでよろしいですか? 普通は、データベースから読み出す行為は、処理時間がかかるので行いません。 もし、その辺の課題を理解した上で、2回読み出したいのであれば、 $sth->execute; を、もう一度処理してください。その後、fetchrow_arrayが動作できます。 一般的には、効率を優先し、自分の配列に一度蓄えた後、複数回利用するのが 多いと思います。

gahau
質問者

お礼

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

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

DBから直接処理した配列は一回使用すると消えてしまうみたいですねー。 もう一回Selectするか、 一回目のforの時に別の配列に入れるしかないのかもしれないです。

関連するQ&A