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

perlでdb(mysql)に接続

  • 質問No.8279037
  • 閲覧数503
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 78% (22/28)

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初心者のため、どこが問題なのか検討がつきません。
ご助言いただきたく存じます。
よろしくお願いいたします!

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

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

ベストアンサー率 52% (232/446)

ひとさまのサーバ設定状況がどうなってるかは実際にさわっていないので想像するしかないんですが
まずは、コマンドライン(mysqlクライアント)でつながってテーブルまで見えるかどうかでしょうか?
Webでどうこうより、機能を切り分けて、DB側からアプローチして見ることです
このソースをざっと見る限りじゃ問題はなさそうに見えるので、権限だったり、ポートだったり、DB側の設定ミスだったりとかの環境問題でしょうか
お礼コメント
Reptilez

お礼率 78% (22/28)

返答が遅くなりまして申し訳ありません。
ポートを指定することで接続可能となりました。
ありがとうございました。
投稿日時:2013/10/16 09:44

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 50% (1/2)

そこに書かれている記述内容が、実際に設置された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」が表示されるなど、エラーの出方は全然違いますが、もしそのダブルクォートが抜けているなら、明らかにエラーの一因にはなってますね。
お礼コメント
Reptilez

お礼率 78% (22/28)

返答が遅くなりまして申し訳ありません。
ポートを指定することで接続可能となりました。
ありがとうございました。
投稿日時:2013/10/16 09:45
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ