【perl】データベースを参照してデータ数をカウントする。
モジュールをインストールして、さっそくプログラミングしてみた。開発環境は以下。
・windowsXP
・xampp
・active perl
実際のコードは以下。詳しい説明は、コード以降に。
#! /usr/bin/perl use strict; use DBI; use DBD::mysql; print "Content-Type: text/html; \n\n"; my $user = 'root'; my $passwd = '●●●'; my $dbh = DBI->connect('DBI:mysql:practice1:localhost', $user, $passwd); my $sth = $dbh->prepare('SELECT COUNT(*) FROM test'); $sth->execute; while(my @rec = $sth->fetchrow_array){ print join(',', @rec)."\n"; } $sth->finish; $dbh->disconnect;
以下、解説。
use strict;
この一行を入れると、コマンドプロンプトなどのシェルで実行したときにエラーを表示してくれます。例えば、変数を宣言し忘れているときなんか(新しく変数を使うときにmyをつけていないと指摘されます)。
use DBI; use DBD::mysql;
DBIとDBD::mysql、2つのモジュールの使用を宣言。
print "Content-Type: text/html; \n\n";
ヘッダ。perlのプログラムを実行して何か結果をブラウザ表示させる時は、必ずこのヘッダが必要です。挿入場所は、ブラウザ表示させるコードの前なら、どこに入れても可。
ブラウザに表示させる結果の中に日本語が含まれていたら、charsetの指示もする以下のものを使用する。(今回は、データの数だけ表示させるので上記のものを使用。)
print "Content-Type: text/html; charset = Shift_JIS \n\n";
※「\n\n」の部分で、ヘッダですよ、と宣言している。このヘッダより上記にあるprint文は、ブラウザには表示されない。
my $user = 'root'; my $passwd = '●●●'; my $dbh = DBI->connect('DBI:mysql:practice1:localhost', $user, $passwd);
DB接続を行っている。connectは、DBIクラスメソッドでデーターベースサーバーとの接続を行うメソッド。
書式は、
$dbh = DBI->connect(データソース, ユーザー名, パスワード);
上記のソースのように、$userや$passwd等の変数を宣言してユーザー名とパスワードを入れてからconnectに代入する方法をとってもよいが、宣言せずにconnectに直接入れても可。パスワードの設定をしていないときは、パスワードを省略。
データソースの書き方は、
DBI::mysql:データベース名:ホスト名
データベース名やホスト名は、mySQLadminを起動させ、「特権」をクリックすると確認できる。
my $sth = $dbh->prepare('SELECT COUNT(*) FROM test'); $sth->execute;
$dbh(データベースハンドルメソッド)であるprerareを使用してSQL文の設定を行い、$sth(ステートメントハンドルメソッド)であるexecuteで設定したSQL文を実行している。
prerareの書式は以下。
$sth = $dbh->prepare(SQL文);
while(my @rec = $sth->fetchrow_array){ print join(',', @rec)."\n"; }
$sth(ステートメントハンドルメソッド)であるfetchrow_arrayを利用して、行データを項目の配列として1行ずつ取り出す作業を、データの数と等しい回数while文でループさせる。1行ずつ配列として取り出して、配列recに入れている。
$sth->finish; $dbh->disconnect;
今回使ったSQL文をfinishで破棄し、disconnectでデータベースとの接続を切断。
新しいモジュールを使うときは、メソッドの確認や使い方の概要の確認にまだ時間がかかります。新しいモジュールでも、もっと早く使えるようになれるといいなー。
次は、htmlでログイン画面を作ってDBにあるデータと照合し、判定させるプログラムを作りたい。あと、別件でクローラーも作りたい。