ActivePerlを使用してMySQLにアクセスする方法

このQ&Aのポイント
  • ActivePerlを使用してMySQLにアクセスするためのコードをご紹介します。
  • Windows 7 64bitにActivePerlとMySQLをインストールし、rootというユーザー名とパスワードでログインデータというテーブルを作成しました。
  • DBIモジュールを使用してデータベースへ接続し、SQLの命令を実行して結果を取得するコードを記述しています。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

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

>login_data というテーブルを適当作成しました。 とありますが、プログラムからはデータベース名がlogin_data、テーブル名がtestと読めます。

nakisan2011_12
質問者

お礼

解答ありがとうございました。 プログラムを変更してもう一度実行しましたが、未だうまく動かせません。

関連するQ&A

  • 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
  • (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
  • 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
  • 一回の処理で、2回以上データベースに対してアクセスできない??(perlDBIを使用)

    質問があるのですが、よろしくお願いします。 use DBI; $dbuser = 'root'; $passwd = 'abc'; $db = DBI->connect('DBI:mysql:DB:localhost',$dbuser, $passwd); $prepare = "select MAIL from user where USER_ID = $userid"; $sth->prepare("$prepare"); $sth->execute; @user = $sth->fetchrow_array; $sth->finish; while( ($key, $value) = each %in ){ $sth = $db->prepare("UPDATE user SET $key = '$value' where USER_ID = $in{userid}"); $sth->execute; $sth->finish; } $db->disconnect; という処理を行わせたいのですが、どうもUPDATE文の辺りで、処理が止まってしまっているようなのです。select文はしっかり実行されている形跡があるのですが、1回の処理で2回以上データベースに対してアクセスすることは出来ないのでしょうか? どなたか分かる方いらっしゃいましたらご教授のほどよろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql 最大値 取得 

    mysqlのデータベースから、列の最大値を取り出したいのですが、 以下のように書いているのですが、取得される値が1しか返ってこないです。 間違っているところはあるでしょうか? perlで書いています。 my $dbh = DBI->connect("DBI:mysql:host=${db_host};database=${db_name}", $db_user, $db_pass); my $sth = $dbh->prepare("SELECT MAX(列名) FROM テーブル名"); my $rv = $sth->execute(); print "$rv";

    • ベストアンサー
    • MySQL
  • perlからMySQL5に接続できません

    WindowsでperlからMySQLに接続できません。 perlは以下のようなものです。 結果は「1」と表示されるので、MySQLへの接続ができていないのだと思います。 考えられる原因がわかる方、アドバイスをお願いします。 #!/Perl/bin/perl use DBI; print "Content-type: text/html\; charset=shift_jis\n\n"; print "1"; my($dbh, $sth); $dbh = DBI->connect("DBI:mysql:database=データベース名;host=127.0.0.1", "root", "rootのパスワード",{ RaiseError => 1, AutoCommit => 0 }); print "2"; $sth = $dbh->prepare("select * from テーブル名;"); 以下略 WindowsXP SP2 Apache2.2.4 ActivePerl5.8.8 MySQL5.0

    • ベストアンサー
    • MySQL
  • MySQLのトランザクションについて

    初めて質問します。 今、PerlのDBIを使ってMySQLのトランザクション処理にチャレンジしています。 ところが、rollback処理がうまくできません。 具体的には、 table2 がある状態で下のプログラムを動かすと、 エラーの表示が出るのに、 table1 は作成されました。 何らかのエラーがあれば、どちらも作成されないようにしたいです。 ======================================================= my %sql; $sql{db_name} = "database"; $sql{host} = "localhost"; $sql{user_name} = "user_name"; $sql{password} = "password"; use DBI; my $dbh = DBI->connect('DBI:mysql:'.$sql{db_name}.':'.$sql{host}, $sql{user_name}, $sql{password} ,{RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || &Err(); my $sth; my $re; eval { my $sql_string1 = "create table table1(`id` int);"; my $sql_string2 = "create table table2(`id` int);"; $sth = $dbh->prepare($sql_string1); $re = $sth->execute; $sth = $dbh->prepare($sql_string2); $re = $sth->execute; }; if ($@) { $tag="Err:".$@."\n"; $sth = $dbh->rollback; }else{ $sth = $dbh->commit; } $sth->finish; $dbh->disconnect; ======================================================= 検索して、いろいろいじっても解決しませんでした。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • MySQLに登録すると文字化け

    Perlのスクリプトで、MySQLにユーザー情報を登録しているのですが、 二つのDBに登録しています。 一つ目のDBはEUC-JPで、もう一つがUTF-8のMySQLになっています。 具体的には、最初はあるCMSのユーザー登録を別のPerlスクリプトで行い正常に保存されていたのですが、今年の春頃からWordpressも使う必要があり、そちらがUTF-8のDBなのです。 英数字なら問題なく登録可能なのですが、日本語が入ると、UTF-8のDBでは文字化け等が発生して、正常に登録されませんでした。 ちなみに、Perlスクリプト自体はEUC-JPで記述・保存されているファイルなのですが、先述の通り、先のCMS側のDBがEUC-JPなので、このPerl自体をUTF8にするわけにもいかず・・・ 以下のようなソースになっています。 ------------------------------------------------------------------------ # データベースへアクセス $dbh = DBI -> connect ("DBI:mysql:$dbname:$dbhost",$dbusername,$dbpassword) or show_ErrorPage('データベースにアクセス出来ません。'); #$dbh->do("set names utf8"); #$data{'username'} = decode('utf8', $data{'username'}); #$data{'username'} = encode("shiftjis",decode("euc-jp",$data{'username'})); #$data{'username'} = encode("euc-jp",decode("utf8",$data{'username'})); #$data{'username'} = Encode::from_to($data{'username'}, 'utf8', 'euc-jp'); #utf8::decode($data{'username'}); #$data{'username'} = Encode::from_to($data{'username'},'euc-jp','utf-8'); $sth = $dbh->prepare( qq{ INSERT INTO $table2 (ID,user_login,user_pass,user_nicename) VALUES("$rows[0]", "$data{'username'}","$data{'password'}", "$data{'username'}") } ); $sth -> execute() or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)"); $sth -> finish(); $sth2 = $dbh->prepare(qq{ SELECT ID FROM $table2 WHERE user_login = "$data{'username'}"}); $sth2 -> execute() or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)"); @rowss = $sth2->fetchrow_array; $sth2 = $dbh->prepare( qq{ INSERT INTO $table3 (user_id,meta_key,meta_value) VALUES ("$rowss[0]","first_name",""), ("$rowss[0]","last_name",""), ("$rowss[0]","nickname","$data{'username'}"); $sth2 -> execute() or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)"); ------------------------------------------------------------------------ 少し省いている部分もあり、数字等に間違いがあるかもしれません。 このPerlはフォームスクリプトで、$data{'username'}にユーザー名を入力してもらいます。 それを「user_login」や「user_nicename」に登録をしたいのですが、先のEUC-JPのDBでは問題ありませんが、UTF8のDBでは空白になります。 その後色々調べてみて、上記コードの#の部分を追加して試してみましたが、空白ではないものの文字化けになったり数字になって登録されてしまうようになりました。 やりたいことは、「$data{'username'}」という変数をUTF8に文字エンコードをしてWordpress側のDBに登録を行いたいのです。 その後「perl utf8 フラグ」などのキーワードを知り調べてみましたが、具体的に自分の知識では解決できずに悩んでおります。 もし宜しければご教示頂けますと幸いです。 宜しくお願い申し上げます。

  • MySQLにバイナリデータを正常に保存できない

    ローカルに保存してあるファイルをMySQLにバイナリデータとして格納して保存したいと思ってます。 データは格納できるのですが、文字エンコード?の問題でファイルが壊れてしまっているみたいです。 格納後、出力した際にjpgなどの画像は問題なく表示されるのですが、xlsやpdfなどのファイルが開けなくなります。MySQLの文字コードはUTF8です。 #!/usr/bin/perl use DBI; my $dbh = DBI->connect('DBI:mysql:database:localhost:3306', 'user', 'password'); # ファイルパス my $file = '/tmp/test.xls'; # ファイルサイズ my $size = -s $file; # バイナリデータ読み込み my $line; open(IN, $file); binmode(IN); sysread(IN, $line, $size); close(IN); # DBに格納 my $sth = $dbh->prepare(qq|INSERT INTO file_table ( `file_name`, `file_data` ) VALUES (?, ?)|); $sth->execute('test.xls', $line); $dbh->disconnect; 上記のようなコードなのですが、おかしな点があれば教えてください。 よろしくおねがいします。

    • ベストアンサー
    • Perl
  • MYSQL 4.1 の余計なエスケープ処理

    おはようございます。PERL 5.8.5 からMYSQL4.1 サーバーへのデータINSERT 時の文字変換処理について教えてください。 MYSQL 4.1 の文字コードは次の通りです。 SHOW VARIABLES LIKE 'character?_set?_%'; の結果 character_set_client :binary character_set_connection:binary character_set_database:utf8 character_set_results:binary character_set_server:utf8 character_set_system:utf8 MYSQL 4.1 サーバーが上記のような状態で、PERL で次の処理をします。なお、PERL ソース自体はEUC で書かれています。 #!/usr/bin/perl use Jcode; use DBI; $string = "あああ"; Jcode::convert( ?$string, 'utf8', 'euc' ); $dbh = DBI->connect( 'DBI:mysql:DB名:ホスト名:3306', 'ユーザー名', 'パスワード' ,{AutoCommit => 0} ); $sth = $dbh->prepare( "set names utf8" ); $sth->execute; $sth->finish; $sth = $dbh->prepare( "insert into test values( ? )" ); $sth->bind_param( 1, $string ); $sth->execute; $sth->finish; $dbh->commit; $dbh->disconnect; 上記のソースを実行すると、MYSQL 4.1 サーバーには [あ?あ?あ] のような、余計なエスケープが掛かった状態で文字がINSERT されているのです。 私としては、set names utf8 で、MYSQL 4.1 サーバーとクライアントで同様の文字コードを使うようにしているので、MYSQL 4.1 における余計な文字コード変換はないものと思っています。余計な文字コード変換がないにもかかわらずエスケープ文字が入る理由が分かりません。 この現象についてお分かりの方がいらっしゃいましたら教えて頂きたく思います。なお、ネットでも調べたのですが、どの方も未解決でしたので質問さえて頂きました。 お願いします。

専門家に質問してみよう