end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

Amon2で、mysql に Amon2::DBI 接続する

以下は、ORマッパーを使用しないケースです

設定ファイル - development.pl

use File::Spec;
use File::Basename qw(dirname);
my $basedir = File::Spec->rel2abs(File::Spec->catdir(dirname(__FILE__), '..'));
my $dbpath = File::Spec->catfile($basedir, 'db', 'development.db');
+{
    'DBI' => ["dbi:mysql:host=localhost;port=3306;database=test",
#              "dbi:mysql:database=test",  #このDSNの書式でもOK
#              "dbi:mysql:dbname=test",    #このDSNの書式でもOK
              'root', 'ないしょ',
              +{
                mysql_enable_utf8 => 1,
               }
             ],
};

以下は、これまで使用していたDBI接続の参考 - config.yaml

db:
  host: localhost
  port: 3306
  db_name: xing
  db_user: ないしょ
  db_pass: ないしょ
  db_opt:
    AutoCommit: 0
    mysql_enable_utf8: 1
  client_encoding: utf8

設定ファイル - DB , DBI クラス

Amon2::DBIは変更していませんので、これまで使用していたDBI接続の参考を以下に記載します。

package Xing::DBI;
use strict;
use utf8;
use Xing::Config;
use base qw(DBI);
use Data::Dumper;

sub connect {
    my ($class) = @_;

    my $conf = Xing::Config->get_config();
    my $db =
	"DBI:mysql:database=$conf->{db}->{db_name};host=$conf->{db}->{host}";
    my $dbh = DBI->connect($db,
			   $conf->{db}->{db_user},
			   $conf->{db}->{db_pass},
			   $conf->{db}->{db_opt});
    $dbh->do("SET NAMES $conf->{db}->{client_encoding}") or
	die "cannot set encoding";
    return $dbh;
}
1;
__END__

利用時...

package TestAmon2App::Web::Dispatcher;
use strict;
use warnings;
use utf8;
use Amon2::Web::Dispatcher::RouterBoom;
use Amon2::DBI;
use Data::Dumper;


any '/' => sub {
    my ($c) = @_;

    ## ココ
    my $dbh = Amon2::DBI->connect($c->config->{DBI}->[0]);

    my $sth = $dbh->prepare("select * from user");
    $sth->execute();
    while( my $row = $sth->fetchrow_hashref() ){
        print STDERR Dumper($row);
    }


    my $counter = $c->session->get('counter') || 0;
    $counter++;
    $c->session->set('counter' => $counter);
    return $c->render('index.tx', {
        counter => $counter,
    });

    ## ココ
    $dbh->commit();
    $dbh->disconnect();
};
1;