アプリ版:「スタンプのみでお礼する」機能のリリースについて

自分で作ったmysqlからデータを参照し様として


#!/usr/bin/perl
print "Content-type: text/html \n\n";


use DBI;
#######DBIパス編集##########
$DB='****'
$DBusr='****'
$DBpass='****'
$DBtable='****'

#########DBI操作############

$FIND = "SELECT a,b,c,d,e,f,g,h,i FROM $DBtable WHERE a=\'****\' limit 1";
$dbh = DBI->connect($DB,$DBusr,$DBpass);

$serch = $dbh->prepare($FIND);
$serch->execute;
$serch = $serch->fetch;


#######取り出したデータを配列に代入########
$r = 0;
while( @rows = $serch->fetchrow_array ) {
for( $f = 0; $f < $serch->{NUM_OF_FIELDS}; $f++ ) {
$data{$serch->{NAME_lc}->[$f]}{$r} = $rows[$f];
}
$r++;
}
while( ($key, $val) = each %data ) {
while( ($key2, $val2) = each %{$val} ) {
$hash{$key} = $val2;
}
}
$a = $hash{'a'};
$b = $hash{'b'};
$c = $hash{'c'};
$d = $hash{'d'};
$e = $hash{'e'};
$f = $hash{'f'};
$g = $hash{'g'};
$h = $hash{'h'};

##########テスト用に表示#############
print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=Shift_JIS\">";
print "<HTML><HEAD>";
print "<TITLE></TITLE>";
print "</HEAD>";
print "<BODY BGCOLOR=$bgc TEXT=\"$txtc\" LINK=\"$lic\">";

print "テスト:$bgc,$txtc,$lic,$button,$sight_name,$sight_tit,$bun1,$sex";

print "</BODY></HTML>";

と書いてるのですが、実行するとデータが取り出せません。
調べてみると
while( @rows = $serch->fetchrow_array )
の部分でエラーが出ます。
Can't call method "fetchrow_array" on unblessed reference atと言われてしまうのですが、何か記述の仕方等何か間違ってる部分などあれば指摘お願い致します。
ちなみにデータベースへの接続等は出来ています。

A 回答 (2件)

> $serch = $serch->fetch;


これは何をしようとしているのでしょう?
少なくともこれによって $serch はDBIオブジェクトでなくなるでしょうから、

>while( @rows = $serch->fetchrow_array ) {

ここでインスタンスメソッドの fetchrow_arrayは
呼び出せなくて当然のような気がしますが。
    • good
    • 0
この回答へのお礼

ありがとうございます!解決しました。

単純に間違えていただけでした…。

お礼日時:2007/09/10 13:21

$serch->fetch;と$serch->fetchrow_arrayを同時に実行しているのが問題では?


提示されたスクリプトの場合、$serch = $serch->fetch;の1行を削除するのが一番簡単かと。

あと、###取り出したデータを配列に代入###の部分が、ずいぶん複雑になっていますが、素直に$search->fetchrow_hashrefを使った方が自然な気がします。

カラム数を数えるための変数$rが用意してありますが、limit1にしてあるので、常に$r=1なので必要ないのでは?
    • good
    • 0
この回答へのお礼

確かにそうですね。
Cを書いてた時のくせで繰り返し文で配列にいれると言うのがあたりまえになってしまってて…。
ありがとうございます。

お礼日時:2007/09/10 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!