Perl で、データベース (ここでは MySQL を使うときの基本) をおさらいしよう。Perl でのデータベースへのアクセスは、DBI モジュールを使う。このモジュールは XS で書かれているため、Linux などにインストールするには gcc のコンパイル環境が必要である。レンタルサーバは予め DBI がインストールされているところを選んでおけば間違いないが、そうでない場合は自力でインストールする必要があるため注意しよう。
さて、以下はデータベース中のテーブルのフィールドが id、name、value となっていてそれらを扱う場合の例である。最初のデータベースの定義のところで、mysql のところを Pg とするだけで PostgreSQL に対応できる (ようである)。
スクリプト中ではデータベースのテーブルを変数でマッピング (定義) している (ハッシュを使う方法もあると思うのでもっといい方法があったら教えて欲しい)。こうしておくと後でテーブルの定義を変更したときなど柔軟に対応できるだろう。
foreach の中の「$_」は、Perl では「現在処理中のデータ」であり、
foreach my $data (@$DATA) {
    $id    $data->$T_FIELD[$T_ID];
    $name  $data->$T_FIELD[$T_NAME];
    $value $data->$T_FIELD[$T_VALUE];
}
などするのと同義である。
DBI->selectrow_arrayref は、selectrow_array と似ているが、結果をリファレンスで複数行返すところが異なる。リファレンスなのでその後の処理も高速である (と思われる)。
使用するモジュール
use DBI;
#!/usr/bin/perl
use DBI;
# データベースの設定
our $DB_NAME     = 'DBI:mysql:your_database_name';
our $DB_USERNAME = 'your_username';
our $DB_PASSWORD = 'your_password';
our $DB_TABLE    = 'your_table_name';
# テーブルの定義
our $T_ID    = 0;
our $T_NAME  = 1;
our $T_VALUE = 2;
our @T_FIELD = (
    '`id`',
    '`name`',
    '`value`'
);
# データベースに接続
my $DB = DBI->connect($DB_NAME, $DB_USERNAME, $DB_PASSWORD)
       || die "Connection error";
# データを検索
my $DATA = $DB->selectall_arrayref(
                            qq|SELECT * FROM `$DB_TABLE` |
                          . qq|WHERE $T_FIELD[$T_ID]='ここに検索したい ID を書く'|
                        );
# データがあれば
if(@$DATA)    {
    my $id, $name;
    # データを出力
    foreach (@$DATA)    {
        $id    = $_->[$T_ID   ];    # $T_ID    = 0
        $name  = $_->[$T_NAME ];    # $T_NAME  = 1
        $value = $_->[$T_VALUE];    # $T_VALUE = 2
        print "$id / $name / $value\n";      # データを表示
    }
}
# データベースの接続を切断
$DB->disconnect();
1;
    トラックバック URL:
    https://perltips.twinkle.cc/trackback/42