自分で作った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と言われてしまうのですが、何か記述の仕方等何か間違ってる部分などあれば指摘お願い致します。
ちなみにデータベースへの接続等は出来ています。
No.1ベストアンサー
- 回答日時:
> $serch = $serch->fetch;
これは何をしようとしているのでしょう?
少なくともこれによって $serch はDBIオブジェクトでなくなるでしょうから、
>while( @rows = $serch->fetchrow_array ) {
ここでインスタンスメソッドの fetchrow_arrayは
呼び出せなくて当然のような気がしますが。
No.2
- 回答日時:
$serch->fetch;と$serch->fetchrow_arrayを同時に実行しているのが問題では?
提示されたスクリプトの場合、$serch = $serch->fetch;の1行を削除するのが一番簡単かと。
あと、###取り出したデータを配列に代入###の部分が、ずいぶん複雑になっていますが、素直に$search->fetchrow_hashrefを使った方が自然な気がします。
カラム数を数えるための変数$rが用意してありますが、limit1にしてあるので、常に$r=1なので必要ないのでは?
確かにそうですね。
Cを書いてた時のくせで繰り返し文で配列にいれると言うのがあたりまえになってしまってて…。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
組み合わせを作るアルゴリズム
-
データベースから取得したデー...
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
-
DoEventsが必要な理由について
-
クラスに配列を渡す方法
-
pythonでファイルのコメント行...
-
DOSコマンドのループ内のTIMEコ...
-
For文を使った九九表の作成
-
VBAで3秒だけ時間を止めたい
-
英語でのシャープとコメの呼び...
-
vbscriptでIE自動入力(途中で...
-
ループ内での条件処理
-
CSVファイルの特定の行だけを読...
-
GIFアニメをループさせたくない
-
VBA横データを縦にしたいです
-
vb.netからエクセル関数書き込み
-
VBScript 配列
-
エクセル関数で1〜12の数字がル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
DBIを使ってのデータの取り出し...
-
python質問
-
perlでファイルの拡張子を除い...
-
アルファベットn文字の組み合わ...
-
grep関数を用いた複数行からの抽出
-
乱数と順列と組み合わせ
-
半角文字の縦書き表示
-
配列やハッシュで中身が同じか...
-
ループ中でのmy宣言と処理速度
-
桁数指定と四捨五入
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
おすすめ情報