m_shige1979のささやかな抵抗と欲望の日々

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

なんとなく作ったサイト

http://www.it-check-matome.info/


Github(注意すること)

https://github.com/mshige1979

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を調べてから再考することが必要。