DBIのインストールエラー | Windows7 64bit + MySQL5.5 + ActivePerl 5.16.3

このQ&Aのポイント
  • DBIのインストールエラーが発生しました。Can't locate object method "driver" via package "DBD::MySQL" at C:/usr/local/lib/DBI.pm line 808.エラーメッセージが表示されており、DBD::MySQLの初期化に失敗している可能性があります。
  • プログラムを実行したにもかかわらず、エラーが発生しました。DBD::MySQLの初期化に失敗し、エラーメッセージが表示されています。DBIのインストール状態に問題がある可能性があります。
  • Windows7 64bit + MySQL5.5 + ActivePerl 5.16.3の環境でDBIをインストールする際にエラーが発生しています。DBD::MySQLの初期化に失敗し、エラーメッセージが表示されています。プログラムの実行に問題がある可能性があります。
回答を見る
  • ベストアンサー

DBIが入っているはずですが、、、

【 windows7 64bit + MySQL5.5 + ActivePerl 5.16.3 】 コマンドプロンプトで直接、 c:\>ppm install DBI No missing packages to install というメッセージがでます、これは「もうインストールされてるよー」という意味だと思いますが、プログラムを実行しても、 Software error: DBD::MySQL initialisation failed: Can't locate object method "driver" via package "DBD::MySQL" at C:/usr/local/lib/DBI.pm line 808. Perhaps the capitalisation of DBD 'MySQL' isn't right. at C:/Apache2.2/htdocs/00001/shinki_data_sakusei.pl line 33. というエラーがでます。 ====================================== # 初期設定部分 use strict; use warnings; # エラーをブラウザに表示 use CGI::Carp qw(fatalsToBrowser); use utf8; binmode STDIN, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; use Encode; use DBI; # プログラム開始 # ユーザ名とパスワード my $dbname = 'login_data'; my $dbhost = 'localhost'; my $user = 'root'; my $pass = 'root'; #データベースへ接続 my $db = DBI->connect( "DBI:MySQL:dbname = $dbname;host = $dbhost", $user, $pass ); if ( ! $db ){ print "エラー: $db->err $db->errstr\n"; } # 命令 my $sth = $db->prepare( "SELECT * FROM login" ); # 実行 $sth->execute; # 出力 while( my @row = $sth->fetchrow_array ){ print "@row\n"; } #データベースから切断 $db->disconnect; __END__

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

エラーメッセージの > Perhaps the capitalisation of DBD 'MySQL' isn't right. at C:/Apache2.2/htdocs/00001/shinki_data_sakusei.pl line 33. は「たぶん DBD の 'MySQL' の大文字・小文字が間違ってるんじゃないかなぁ」と読めます。おそらく > my $db = DBI->connect( "DBI:MySQL:dbname = $dbname;host = $dbhost", $user, $pass ); の MySQL が問題ではないかと。

nakisan2011_12
質問者

お礼

ありがとうございます、小文字大文字でした。全くお恥ずかしいです。 ============================ # 初期設定部分 use strict; use warnings; # エラーをブラウザに表示 use CGI::Carp qw(fatalsToBrowser); use utf8; binmode STDIN, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; use Encode; use DBI; # プログラム開始 print "Content-Type: text/html; charset=UTF-8\n\n"; # ユーザ名とパスワード my $dbname = 'login_data'; my $dbhost = 'localhost'; my $user = 'root'; my $pass = 'root'; #データベースへ接続 my $db = DBI->connect( "DBI:mysql:database=$dbname;host=$dbhost", $user, $pass ); # my $db = DBI->connect('DBI:mysql:localhost', $user, $pass,); if ( ! $db ){ print "エラー: $db->err $db->errstr\n"; } # 命令 my $sth = $db->prepare( "SELECT * FROM login" ); # 実行 $sth->execute; # 出力 while( my @row = $sth->fetchrow_array ){ print "@row\n"; } #データベースから切断 $db->disconnect; __END__

その他の回答 (1)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

参考までに、パッケージがインストールされていない場合のエラーメッセージは以下のとおりとなります。 Can't locate hogehoge.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) 今回はきちんとインストールされているため、#1の回答のようにエラーが返ります。

nakisan2011_12
質問者

お礼

問題は、 my $db = DBI->connect( "DBI:mysql:database=$dbname;host=$dbhost", $user, $pass ); 部分の mysql の小文字大文字部分でした。 すごく恥ずかしいです。 うまく、いきました。ありがとうございました。

関連するQ&A

  • (Perl CPAN) DBDがはいらない

    「windows7 64bit に ActivePerl をいれています」 以下のプログラムを書いて実行したところ、エラーメッセージがでてきました。 Software error: DBD::MySQL initialisation failed: Can't locate object method "driver" via package "DBD::MySQL" at C:/usr/local/lib/DBI.pm line 808. Perhaps the capitalisation of DBD 'MySQL' isn't right. at C:/Apache2.2/htdocs/00001/shinki_data_sakusei.pl line 33. これはつまり、DBD::MySQL がないよ!という意味であると思うのですが、ppmを起動してDBDにあたるモジュールをインストールして再実行してもまだ同じエラーがでます。どうしてもwindows7上で作らなければならないので、困っています。どこか参考になるサイトはないでしょうか? ========================================= use strict; use warnings; # エラーをブラウザに表示 use CGI::Carp qw(fatalsToBrowser); use utf8; binmode STDIN, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; use Encode; use DBI; # プログラム開始 # ユーザ名とパスワード my $user = 'root'; my $pass = 'root'; #データベースへ接続 my $db = DBI->connect('DBI:MySQL:localhost', $user, $pass,); if ( ! $db ){ print "エラー: $db->err $db->errstr\n"; } # 命令 my $sth = $db->prepare( "SELECT * FROM login" ); # 実行 $sth->execute; # 出力 while( my @row = $sth->fetchrow_array ){ print "@row\n"; } #データベースから切断 $db->disconnect; __END__

    • ベストアンサー
    • Perl
  • ActivePerl を使用して MySQL に

    すいません、初心者です。 ActivePerl を使用して MySQL にアクセスしたいです。 windows7 64bit にActivePerlとMySQLを入れ込みました。 MySQLにアクセスするためのユーザー名やパスワードは root です。 login_data というテーブルを適当作成しました。 実際にアクセスしてみるには、どのようなコードを書けばいいでしょうか? =========================================== use strict; use warnings; # エラーをブラウザに表示 use CGI::Carp qw(fatalsToBrowser); use utf8; binmode STDIN, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; use Encode; use DBI; # プログラム開始 # ユーザ名とパスワード my $user = 'root'; my $pass = 'root'; #データベースへ接続 my $db = DBI->connect('DBI:MySQL:localhost:login_data', $user, $pass,); if ( ! $db ){ print "エラー: $db->err $db->errstr\n"; } # 命令 my $sth = $db->prepare( "select * from test" ); # 実行 $sth->execute; # 出力 while( my @row = $sth->fetchrow_array ){ print "@row\n"; } #データベースから切断 $db->disconnect; __END__

    • ベストアンサー
    • Perl
  • DBIモジュールと Perl5.8

    Perl5.8のエンコードが理解できずに困っております。 MySQLでは、utf8の文字コードのデータがあります。 以下のスクリプトを実行させると、 Wide character in print at C:/usr/local/site/lib/DBI.pm line 1008. となります。 対処方法はあるのでしょうか? use utf8; use strict; use DBI; my $dbh = DBI->connect("dbi:mysql:dbname=test", "root", "", { AutoCommit=>1, PrintError=>1, RaiseError=>1} ); my $fname = "test.txt"; my $sth = $dbh->prepare("select id, namae from test order by id asc;"); $sth->execute(); # 出力ファイルを開く。 open FILE, ">" , $fname or die "Can't open $fname: $!"; # 整形された結果をファイルにダンプする。 my $rows = $sth->dump_results(80, "\n", ",", \*FILE); # 出力ファイルを閉じる。 close FILE or die "Error closing result file: $!\n"; $dbh->disconnect();

    • ベストアンサー
    • Perl
  • perlからmysqlに接続できない

    #! c:/perl/bin/perl  use DBI; $user = 'root'; $passwd = 'パスワード'; $db = DBI->connect('DBI:mysql:db1:localhost', $user, $passwd); $sth = $db->prepare("INSERT INTO bunrui VALUES (1,'1st','memo')"); $sth->execute; $sth->finish; $db->disconnect; perlからmysql二接続するためDBIをインストールして、上のようなサンプルコードを実行してみたのですが Internal Server Error になってしまいます。どこかコードが違っているのでしょうか?

    • ベストアンサー
    • Perl
  • class:DBIについて

    はじめまして。 perlのclass::DBIを使ってプログラムを書いています。 このclass::DBIで文字コードを指定するにはどうしたらいいのかわかりません。 (set names utf8というやつです。) わかる方教えてください。 今は次のように記述しています。 package CDBI; use strict; use base 'Class::DBI'; $Class::DBI::Weaken_Is_Available = 0; __PACKAGE__->set_db('Main', 'DBI:mysql:database', 'user', 'pass'); 1;

  • 文字セットの変換

    perlCGIでperlDBIからPostgreSQLに接続してデータを文字セットをUTF-8に変換して表示するプログラムを作成していますが、この度、新サーバに移設したところ文字変換がうまくいかないようです。 これまでは、文字セット変換は、 $ENV{'PGCLIENTENCODING'} = 'UTF-8'; でうまく作動しておりましたが、新サーバではだめなようです。 そのため $dbh = DBI->connect("DBI:Pg:dbname=$dbname", "$dbusr", "$dbpas") || die &error(not_connect); $sth = $dbh->prepare( "SET client_encoding TO 'UTF-8' ") || die &error(not_prepare); $sth->execute() || die &error(not_execute); $sth->finish || die &error(not_finish); で変換を試してみましたがこれもだめでした。 なにが原因なのか分かりません。 ご回答をよろしくお願いします。 新サーバの環境は、 OS:Debian sarge PostgreSQL7.4.7 DBI 1-46 DBD 1-41 perl 5.8 です。

  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • failed: Can't connect to local MySQL serverこのようなエラーがでて悩んでいます。

    cygwin上でperlの $db = DBI->connect("DBI:mysql:$dbname:$host", $user, $passwd); この文を実行しようとすると DBI connect('project:localhost','root',...) failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) このようなエラーがでて悩んでいます。/tmpにはmysql.sockが見当たりません。いろいろなサイトを見てみてmy.cofを書き換えるなどの対処法があったのですが、そのmy.cofすらどこにもありません。DBD::mysqlなどのモジュールは一応入ったみたいなんです。どのように対処したらよいでしょうか?

  • perlからDBIを使用したpostgresへの接続でエラー

    perlからDBIを使用して、データベースにアクセスしたいと思っていますが、connectで下記のようなエラーが出力され接続できません。 ↓↓↓↓↓↓apacheのエラーログ↓↓↓↓↓↓↓ DBI connect('dbname=[mscdb]','[postgres]',...) failed: FATAL: database "[mscdb]" does not exist at /web/member/cgi-bin/dbitest.pl line 8 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ mscdbがないとエラーが出力されているように思いますが、mscdbは存在します。どういった原因が考えられるでしょうか? プログラムには以下のように記述しています。 #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=[mscdb]'; use constant DBUSER => '[postgres]'; use constant DBPASS => '[××××]'; DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; 環境は以下の通りです。    perl v5.8.2    postgres v8.1.2 vine linux dbd v1.49

    • ベストアンサー
    • Perl
  • perlでdb(mysql)に接続

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

    • ベストアンサー
    • Perl

専門家に質問してみよう