Class::DBIを遊んでみる

http://search.cpan.org/dist/Class-DBI/lib/Class/DBI.pmより

まず、テーブルを作ります。


mysql> create table user (
seq int(10) NOT NULL auto_increment,
name varchar(20) NOT NULL,
class int(2) NOT NULL,
passwd varchar(30) NOT NULL,
mail varchar(60) NOT NULL,
PRIMARY KEY (seq)
) TYPE = InnoDB;
mysql> desc user;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| seq | int(10) | | PRI | NULL | auto_increment |
| name | varchar(20) | | | | |
| class | int(2) | | | 0 | |
| passwd | varchar(30) | | | | |
| mail | varchar(60) | | | | |
+--------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql>

サンプルスクリプト

ここではGETで渡したユーザ名をDBにINSERTして、
LIKE演算子でデータを取得してます。


#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use User;
my $cgi = CGI->new();
print $cgi->header(-type=>'text/html',-charset=>'Shift_jis',);
my $user = User->create({
name => $cgi->param('user'),
class => 1,
passwd => 'hoge',
mail => 'neko@neko.com',
});
my $obj = User->search_like( name => 'nekokak%' );
while(my $line = $obj->next){
print $line->name,"<br>\n";
}
exit;

テーブルuserをマッピングするモジュールを作成


package User;
use strict;
use warnings;
use base qw/Class::DBI/;
__PACKAGE__->set_db('Main','dbi:mysql:nekodb','nekokak','*******',
{
RaiseError => 1,
AutoCommit => 1,
}
);
__PACKAGE__->table('user');
__PACKAGE__->columns(Primary => qw/seq/);
__PACKAGE__->columns(ALL => qw/name class passwd mail/);
1;

こんな感じですね。

せっかくDBにMySQL使ってるので、
次はClass::DBI::mysqlで拡張とかもしてみませう。

本当はClass::DBIはTTと連携させると最高なんですけど、
(Class:DBIで取得した結果をTTで簡単に展開できる為)
PPM経由でTT入れられないとな〜。

だれかつД`) タスケレ !!

(追記)
PPM経由でTT入れられるよんw

ppm install Template-Toolkitみたいなのねん。

ppm install Templateってやってたよん。。。