PerlでDBIでMySQLに接続
データベースに接続する
ライブラリに「Teng」とかあるけどまずはDBIで制御の練習
ぶっちゃけサンプルをネットで探したけどなんかこんがらがったwww
準備
cpanmでモジュールを追加
cpanm Teng DBD::mysql
※もう先にTengも入れておくあとで次回に使用するかもしれないので
データベースを作成
mysql -uroot -p mysql> create database sample1; mysql> use sample1; mysql> create table table01( user_id text, nickname text, ago int);
※接続してテーブルまで作成する
データを3件位登録する
# データを登録 mysql> insert into table01(user_id, nickname, ago) values('P001', 'sample1', 20); mysql> insert into table01(user_id, nickname, ago) values('P002', 'sample2', 25); mysql> insert into table01(user_id, nickname, ago) values('P003', 'sample3', 12); mysql> select * from table01; +---------+----------+------+ | user_id | nickname | ago | +---------+----------+------+ | P001 | sample1 | 20 | | P002 | sample2 | 25 | | P003 | sample3 | 12 | +---------+----------+------+ 3 rows in set (0.00 sec) mysql>
ソース作成
sample1.pl
#!/usr/bin/env perl use strict; use warnings; use DBI; use Data::Dumper; # 接続 my $dbh; $dbh = DBI->connect( "DBI:mysql:database=sample1;host=localhost;port=3306;" , "root" , "password" ); # プリペアードステートメント my $sth; my $ref; print "処理前------------------------\n"; $sth = $dbh->prepare("select * from table01"); $sth->execute(); while($ref = $sth->fetchrow_hashref()){ print "data: $ref->{'user_id'}\n"; } $sth->finish(); # 条件を指定 $sth = $dbh->prepare("select * from table01 where user_id = ?"); $sth->execute(['P002']); while($ref = $sth->fetchrow_hashref()){ print "data: $ref->{'user_id'}\n"; } $sth->finish(); print "処理後------------------------\n"; # データを追加 $sth = $dbh->prepare("insert into table01(user_id, nickname, ago) values(?, ?, ?)" ); $sth->execute('P004', 'sample4', 50); $sth->finish(); # 再読み込み $sth = $dbh->prepare("select * from table01"); $sth->execute(); while($ref = $sth->fetchrow_hashref()){ print "data: $ref->{'user_id'}\n"; } $sth->finish(); # 切断 $dbh->disconnect();
結果
[root@localhost db_sample]# perl sample1.pl 処理前------------------------ data: P001 data: P002 data: P003 処理後------------------------ data: P001 data: P002 data: P003 data: P004 [root@localhost db_sample]#
まとめ
Tengは関連モジュールがたくさんあるのでインストールに時間がかかる。
基本、SQLは直書きが好きなのでコード量や手間は大きくなりそうだけどこちらを使うかも?
シンプルなテーブル制御の場合はTengの方が簡単かも?
Tengを調べてから再考することが必要。