package MyDBI; use strict; use warnings; use base qw(DBI); use Data::Visitor::Encode; package MyDBI::db; use base qw(DBI::db); my $dev = Data::Visitor::Encode->new(); sub prepare { my ( $dbh, @args ) = @_; # sql文が入っている @args = map { Encode::encode( 'cp932', $_ ) } @args; return $dbh->SUPER::prepare(@args); } package MyDBI::st; use base qw(DBI::st); sub execute { my ( $sth, @args ) = @_; # プレースホルダの値が入っている @args = map { Encode::encode( 'cp932', $_ ) } @args; return $sth->SUPER::execute(@args); } sub fetch { my ( $sth, @args ) = @_; my $row = $sth->SUPER::fetch(@args) or return; return $dev->decode( 'cp932', $row ); } sub fetchrow_arrayref { my ( $sth, @args ) = @_; my $array_ref = $sth->SUPER::fetchrow_arrayref(@args) or return; return $dev->decode( 'cp932', $array_ref ); } 1;