忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

perl DBI モジュールのメソッドをuseして使う

色々なスクリプトからDB接続をするので、DBIモジュールのメソッドを共通関数用のpackageにいれたいなーと、、、

ちょっとはまったのでメモ。

perlでDBIモジュールをつかってMysqlへ接続するのは、そこらじゅうに記述があるので割愛。

やりたかったのは、DBIメソッドのconnectとかdisconectとかをpackage化して使いたかった。

[main.pl]

#!/sur/bin/perl

use strict;
use warnings;
use DBI;

use Func;

my $ret;
my $sql;

eval{
  $ret = conDB(dsn, user, pass);
  ・・・中略
  $sql = "select * from xx where xx";
  $ret = exec_sql($sql);
  ・・・中略
  $ret = disconDB;
};
if( $@ ){
  #エラー処理
}
exit;


[Func.pm]

package Func;

use strict;
use warnings;
use Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( conDB exec_sql disconDB );
our $dbh;

sub conDB{
  my $dsn = $_[0];
  my $user = $_[1];
  my $pass = $_[2];

  $dbh = DBI->connect($dsn, $user, $pass
                       {RaiseError => 1 ,PrintError => 1 , AutoCommit => 0}) or die "DB connect Error :$!";
}

sub exec_sql{
  my $sql = $_[0];
  my $ret;
  my $sth;
  $ret = $sth->fetchall_arrayref;
  return $ret;
}

sub disconDB{
  $dbh->disconnect;
}

戻り値チェックとか細かいのははしょっているけど、データベースハンドルとして使っている$dbhをpackage側でour宣言しないと、main.plでconnectした後のexec_sqlにデータベースハンドルが引き継がれないのでエラーになっちゃうと言うお話。
main.plでour宣言してた、、、。


拍手[0回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター