プロが教える店舗&オフィスのセキュリティ対策術

症状:
perlのプログラム内でDBIを使うと、その後の行がすべてスキップされてしまいます。エラーをだしてくれることもなく、何が原因なのかさっぱりわかりません。


#!/usr/bin/perl
use DBI;
print "Content-type: text/html", "\n\n";
print "this is test";
$d = 'DBI:mysql:test:Localhost';# データソース
$u = 'root';# ユーザ名
$p = 'mypass';# パスワード
# データベースへ接続
$dbh = DBI->connect($d, $u, $p) or print "Can't connect to MySQL";
print "<br />success!";


「this is test」は表示されるのですが、「success!」が表示されないのです。もちろん「Can't connect to MySQL」も、その他のエラー表示も表示されません。

$dbh = DBI->connect($d, $u, $p) or print "Can't connect to MySQL";

の行を消すと、「success!」も表示されます。


DBIを再インストールしたほうがよいのでしょうか? もともと、DBIをインストールするとき、いろいろてこずっていて、その時に何かおかしなことになってしまったのかもしれません。
それとも別の場所に問題があるのでしょうか。

________________________________
環境:
Ubuntu8
Xampp

ちなみにcpanで i DBIとやると、

CPAN: Storable loaded ok (v2.18)
Going to read /root/.cpan/Metadata
Database was generated on Fri, 20 Jun 2008 07:02:51 GMT
Strange distribution name [DBI]
Bundle Bundle::DBI (TIMB/DBI-1.605.tar.gz)
Module = DBI (TIMB/DBI-1.605.tar.gz)
2 items found

とでます。

この問題のおかげでもう2日間作業がすすまないでいます。どなたか力をかしてください。おねがいします。

A 回答 (2件)

DBD::mysqlモジュールが存在しない場合、エラーが標準エラー出力に出てしまうので、



print "Can't connect to MySQL";
の表示は出ないですね。evalでキャッチできないかやってみましたけれど、やっぱり標準エラー出力にエラーメッセージが出ただけでした。

インストールされているモジュールは、以下のやり方で確認できます。確認されてみてはどうでしょうか。

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

print "perl version: $] (",sprintf("%vd", $^V),")\n\n";

BEGIN{ unshift(@INC,'./'); $ENV{'PERL5LIB'}='./'; }

my @modules = qw(
CGI
DBI
DBD::SQLite
DBD::MySQL
Encode
DB_File
SDBM_File
Switch
NOMODULE
ReadOnly
);

foreach (@modules){
print "$_: ";
eval "use $_;";
print (eval "\$${_}::VERSION" || 'not available');
print "\n";
}

print "\n";
    • good
    • 0
この回答へのお礼

神です。
おかげさまでようやくこの問題から解放されました。

おっしゃる通り、DBD::mysqlモジュールを入れると動きました。
それからインストールされているか確認できる上のプログラムについてはかなり便利で、これからことあるごとに使わさせてもらおうと思います。

ほんとうにどうもありがとうございました。

ちなみに上のプログラムでは
DBD::MySQL
となっていますが、これでやるとインストールできていたとしても「not available」とでます。
DBD::mysql
とやると、うまくいきました。

お礼日時:2008/06/24 00:19

Localhostを、localhostに書き換えると動くなんてことはないですか?


自分の場合はいつも、host=localhost のように指定してますけど。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Localhostを、localhostに書き換えてみてもダメでした・・・。
(host=localhostにかえてもダメでした)

お礼日時:2008/06/22 20:56

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