電子書籍の厳選無料作品が豊富!

perlでdb(mysql)に接続し、取得したデータを
表示させるというようなことをしたいのですが、うまく
いきません。

ファイル名test.cgi
mysqlのバージョンは 5.0.45で
記述は以下です。



#!/usr/bin/perl
use DBI;

my $dbh = DBI->connect("DBI:mysql:database, "userid", "password");
my $sth = $dbh->prepare('SELECT * FROM tablename');
$sth->execute;
print "Content-Type: text/plain\n\n";
print "\n";
while(my @row = $sth->fetchrow_array) {
print "$row[0]:$row[1]\n";
}
$sth->finish();
$dbh->disconnect();
exit;


ブラウザで確認すると何も表示されず、ログとして
以下のエラーが確認できます。

DBD::mysql::st execute failed: Table 'database.tablename' doesn't exist at test.cgi line 8.
DBD::mysql::st fetchrow_array failed: fetch() without execute() at test.cgi line 11.




my $sth = $dbh->prepare('SELECT * FROM tablename');
で指定したテーブルは存在しておりますし、SQL文の記述も
問題ないと思われます。
また、ファイルのパーミッションは705(755でも同様の結果)です。
perl初心者のため、どこが問題なのか検討がつきません。
ご助言いただきたく存じます。
よろしくお願いいたします!

A 回答 (2件)

ひとさまのサーバ設定状況がどうなってるかは実際にさわっていないので想像するしかないんですが


まずは、コマンドライン(mysqlクライアント)でつながってテーブルまで見えるかどうかでしょうか?
Webでどうこうより、機能を切り分けて、DB側からアプローチして見ることです
このソースをざっと見る限りじゃ問題はなさそうに見えるので、権限だったり、ポートだったり、DB側の設定ミスだったりとかの環境問題でしょうか
    • good
    • 0
この回答へのお礼

返答が遅くなりまして申し訳ありません。
ポートを指定することで接続可能となりました。
ありがとうございました。

お礼日時:2013/10/16 09:44

そこに書かれている記述内容が、実際に設置されたtest.cgiからの完全なコピペであるなら(タイプミスがないなら)、1ヶ所気になる部分があります。


-------------------------------------------
my $dbh = DBI->connect("DBI:mysql:database, "userid", "password");
-------------------------------------------
databaseのうしろに「閉じのダブルクォート」が抜けてます。

ただ、私もそのダブルクォートを抜いて試してみましたが、肝心の、
--------------------------------------------
DBD::mysql::st execute failed: Table 'database.tablename' doesn't exist at test.cgi line 8.
--------------------------------------------
などというエラー行は見当たりませんでした。
その代わりに、ログには大量のエラー行が発生し、ブラウザには「Internal Server Error」が表示されるなど、エラーの出方は全然違いますが、もしそのダブルクォートが抜けているなら、明らかにエラーの一因にはなってますね。
    • good
    • 0
この回答へのお礼

返答が遅くなりまして申し訳ありません。
ポートを指定することで接続可能となりました。
ありがとうございました。

お礼日時:2013/10/16 09:45

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