« Mysqlにアクセスできるプログラム:Perl(CGI)、PHP | メイン | PHPを使ったDBアクセス »

June 13, 2006

Perlを使ったDBアクセス

第16回 Perlを使ったDBアクセス

今回はPerlを使ったDBアクセスの説明をします。
その前に基本的な事項として、さくらインターネットでPerlを使うときのパスとして

#!/usr/bin/perl

これがプログラムの先頭に必要です。
無料で配られている掲示板のスクリプトなどを見ると
Perlの設定をしているところが必ずあると思いますが
さくらインターネットでPerlを使う場合は、一番上を上記のようにしてみてください。


で、データベースを使うには
実はさくらインターネットのマニュアルにPerlを使った
データベースのアクセスの仕方は掲載されていません。
(PHPを使ったDBアクセスの方法も載っていません)

Mysqlは自己責任で使うものという規定がありますので
基本的にMysqlで何か起きたとしてもさくらインターネットに問い合わせはしないほうがよいかと思います。

Perlを使ってMysqlにアクセスするには具体的には「DBI」というものを使います。
DBIとは、Perlからデータベースにアクセスするためのアプリケーション・プログラミング・インターフェース(API)で
このDBIに関数、変数、規約などが定義されており、使用するデータベースに依存しない一貫性のある
データベース・インターフェースを提供してくれます。

例えば、Windowsにはそれを実現する手段としてODBCというものがあったり、
Javaの場合にはJDBCというものがありますが、
Perlの場合は、DBIというものを使うわけです。


PerlでDB(Mysql)にアクセスする
サンプルプログラムとしては以下のようになります。

use DBI;

$user = '●●●';
$passwd = '▲▲▲';
$db = DBI->connect('DBI:mysql:DB名:ドメイン名', $user, $passwd);

#SQL文
$sth = $db->prepare("SQL文");
$sth_in ->execute;

$sth->finish;
$db->disconnect;


●●●のところは、DBにアクセスするユーザ名、▲▲▲のところはパスワード、
それと「DB名:ドメイン名」のところにはDB名のドメインが入ります。

ちなみにここで注意しておかなければいけないのがパスワードのところで、
このパスワードは、さくらインターネットのコントロールパネルにログインするときの
パスワードとは異なります。

具体的にはコントロールパネルのところに
データベースのパスワードを設定するところがあります。

コントロールパネルにログインをして
「データベースの設定」をクリック

データベースの設定画面


データベースと管理ツールが開くので、

データベースパスワード変更の設定画面

そこでデータベース接続パスワードを設定します。
また、「DB名:ドメイン名」は黒塗りでつぶして有りますが
「データベース サーバ」というものが入ります。

あとは、
$sth = $db->prepare("SQL文");
のところで具体的なSQL文を書けばDBにアクセスが行えます。

この方法で、今まで使っていたCGIの掲示板のログ形式をデータベースに変えて
Mysqlを使った掲示板なんて作るのも面白いでしょうね。

私が具体的にPerl→Mysqlのアクセスとして使っているのは
パステル・ミディリン」の音楽の投稿フォームでCGIを使用しており
投稿読者さんが曲ファイルの添付ファイルを送信フォームから送信すると、
Mysqlにアクセスし、データをインサートして
現在誰の音楽ファイルが未更新であるかをわかるようなシステムを組んでおります。

PHPを使って一から添付ファイル送信フォームを作るのが面倒くさかったので
Perlのフリースクリプトを拾ってきて、Perlスクリプトを改造して
音楽送信と同時にさくらインターネットのDBにアクセスして
送信履歴を残すというプログラムを追記しました。


そして音楽送信履歴を見て、音楽更新係さんがPHPで作ったシステムで
条件にあっているものは、採用するので、登録をするというようなシステムを作ったのですが
さくらインターネットでは、Perl、PHP、どちらでもデータベースアクセスができるので
既存のCGIを手軽にMysqlを使ったものに変えられるので便利ですね。

次回はPHPを使ったDBアクセスを説明します。

投稿者 midilin : June 13, 2006 12:15 PM

コメント

コメントしてください




保存しますか?