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 : 12:15 PM | コメント (0)

April 18, 2006

Mysqlにアクセスできるプログラム:Perl(CGI)、PHP

第15回

今まで、Mysqlを使うことでの利点、それとSQLを使って、どのようにデータを検索するかという話をしてきました。
さて具体的なSQLは記述しましたが、どこにSQLを埋め込めばいいの?
HTMLにSQLを埋めれば、いいの?
まったくデータベースを触ったことがない方にはもしかしたら今までの話はチンプンカンプンだったかもしれません。

具体的にはMysqlには、Perl(CGI)やPHPと呼ばれるプログラムの中にSQLを埋め込んでアクセスをします。
掲示板を設置したことがある方には、CGIはおなじみのものかもしれませんね。


----------access.cgi、access.php----------
プログラム
DBアクセスするためのSQLを埋め込む

-------------------------------------------

流れとしては
ユーザが、CGIもしくはPHPにアクセスする

プログラムが実行

プログラムの中でSQLが実行され、結果を取得する

取得した内容をプログラムでブラウザに表示

ユーザが結果を見る

という形ですね。


CGIやPHPのプログラムをいじるの?
すごく難しそう!!
無理だよ、そう思われる方もいらっしゃるかもしれませんが
やり方さえ覚えてしまえば、そんなに難しくはありません。

では、PerlやPHPを使ってどうやってMysqlにアクセスしていくかを次回以降見ていきましょう。

投稿者 midilin : 12:00 PM | コメント (0)

January 30, 2006

Mysqlが必要か?データベースの利点:総計・条件抽出

第13回

第11回「Mysqlが必要か?データの抽出を行いたいか
第12回「Mysqlが必要か?データの並び替えをしたいかどうか
で、データベースを使うと
曲の検索がとてもスムーズにできたり、降順、昇順の並び替えが行えるという話をしました。
他にどんなことができますでしょうか。

また例によって、音楽データベースで例を進めていきます。

(音楽データベース)
投稿者の名前、メールアドレス、ホームページのURL、曲名、曲URL、ファイル名、音楽のジャンル、更新日など・・・・


例えば、曲の全部の数を知りたいとき、
掲示板のログのようなファイルにデータが格納されていたら、一行一行読み込みを始め、
最終行まで読み込んだものをカウントしておかなければいけません。
しかしSQLを使えば

select count(*) from 音楽データベース

これでデータベースに入っている曲数がわかります。
(ちなみに「*」は全部と言う意味で、
 select count(ファイル名) from 音楽データベース
 とやっても同じ結果が帰ってきます)
 
さらに、高度なことをやってみましょう。
音楽データベースには、いろいろな投稿者の方の曲が入っているとします。
Aさん、Bさん、Cさん、・・・・Zさん、
これらの曲数の総計は上記のSQLでわかりますが、Bさんだけの曲数を調べたいときは
どういうSQLを書くのでしょうか。


select count(*) from 音楽データベース where 投稿者の名前 = 'Bさん'

where区に条件を追加するだけで、数がわかります。
最初SQLに慣れるまで取っつきにくいこともあるかもしれませんが
慣れてしまえば、大量のデータを処理するのに非常に役立ってくれます。


商用サイトでしたらデータベースは必須の機能ですし
個人のサイトでもデータを扱うのであれば、とても役立ちます。

さくらインターネットではこれらの機能をサポートしています。

投稿者 midilin : 09:20 AM | コメント (0)

December 14, 2005

Mysqlが必要か?データの並び替えをしたいかどうか

第12回

前回、データベースを使うと、項目の抽出が簡単にできるという話しをしました。


(音楽データベース)
投稿者の名前、メールアドレス、ホームページのURL、曲名、曲URL、ファイル名、音楽のジャンル、更新日など・・・・


データベースにアクセスするにはSQLというものを使うという話もしました。
曲名を抜き出したのなら

select 曲名 from 音楽データベース

ファイル名を抜き出したかったら

select ファイル名 from 音楽データベース

簡単ですね。

では、曲名をローマ字順に並べたいなんていうときどうしますか?
これは、普通にテキスト形式で取得すると
1つ1つデータを取得した後、先頭文字を比較して、並び替えるという作業が必要で
プログラムも複雑になりますし、動作も非常に遅くなります。
(技術的には、メモリも大量にくいます。
 並び替えるには、メモリ内にデータを格納してもっているので)

しかし、SQLを使えば

select ファイル名 from 音楽データベース order by ファイル名

これだけですみます。
上記のSQLは昇順に並び替えをしますが、降順に並び替えたい場合は


select ファイル名 from 音楽データベース order by ファイル名 DESC

とDESCを使うだけで良いのです。

SQLを使えば、並び替えが容易に、しかも膨大なデータがあっても並び替えが可能です。

投稿者 midilin : 09:20 AM | コメント (0)

November 05, 2005

Mysqlが必要か?データの抽出を行いたいか

第11回

前回、Mysqlが必要かどうかは、あなたのホームページに
大量のデータを扱うかどうかで考えたほうがよいという話しをしました。

では、データ量が少なければMysqlは必要ないのでしょうか。
実はそうとも言いきれません。

私のホームページ「パステル・ミディリン」では
音楽の投稿を受けつけていて、その音楽の検索システムを
Mysqlを使って構築しています。

http://midilin.sakura.ne.jp/midilin/php/music_search/music_index.php

この画面では、検索しか行えませんが
別の画面で、音楽更新係さんが曲を登録するシステムも
他にMysqlで作ってあります。

曲の数は全曲あわせて、400曲程度です。
データとしてはそれほど多くありません。でもMysqlを使っています。

具体的に、テキストデータとMysqlを使ったシステムではどう違うのか考えてみましょう。
テキストデータの場合、検索をはじめると、1行1行テキストを読みにファイルの検索を全部検索しにいきます。
だから処理が遅いのですね。

1つのテキストデータとして、音楽の投稿をつくるとこんな感じになるでしょうか。

(音楽データベース)
投稿者の名前、メールアドレス、ホームページのURL、曲名、曲URL、ファイル名、音楽のジャンル、更新日など・・・・

もし、この中から曲名を抜き出したいなんていうことがあったらどう処理しますか?

処理の概要としては、
・曲名が何番目にあるかを定義
・ファイルを先頭から読みこみ
・4番目が曲名なのでそれを抽出

なんていう流れになります。
これが100曲あったら、この処理を100回ぐるぐるまわして、
それを表示するということになるのですが、
どのデータが何番目にあるかとか、覚えていなければいけませんし大変です。

データベースを利用すると、そのわずらさしさがありません。
データベースにアクセスするにはSQLというプログラミング言語を使うのですが

select 曲名 from 音楽データベース

これだけで曲名がずらっと抽出できるのです。
何番目に曲があるかなんて意識しなくてもよいですよね。

もし6番目にあるファイル名を抜き出したかったら

select ファイル名 from 音楽データベース where 6番目

これで終わりです。
簡単でしょう?

複数の項目があって、それを抽出したい場合にデータベースは力を発揮します。
他にはデータベースを使ってどういうことが可能なのでしょうか。
次回、掲載しますね。

投稿者 midilin : 11:00 AM | コメント (0)

October 12, 2005

Mysqlが必要か?大量のデータ処理

第10回

Mysqlとはフリーのデータベースです。
データベースの簡単な説明は第8回のときにしましたが
この機能があるかどうかは、あなたのサイトによって変わってくると思います。

データベースの利便性は、詰めこんだデータを瞬時に検索することや
データの並び替えなどが行えることです。
(もちろん、データの登録や削除も行えます)

一番簡単なデータベースの例を言うと、「掲示板」ですね。
これも文字データを詰めこんだデータベースです。

掲示板などのデータは、通常テキストファイル(カンマ区切りのCSVファイル)という
形式で格納されていることが多いです。

テキストファイルから読みこむのと、
Mysqlなどのデータベースを読みこむのとどう違うかというと
スピードが全然違います。
100件、200件程度なら、掲示板のようなテキストファイルによるデータを
登録・修正・検索・削除でもよいのですが
これが1000件、2000件となると、処理をするときに
サーバーに付加がかかりすぎて実行ができなくなります。

以前、メーリングリストを運営していたことがあって
メーリングリストの内容をテキストに変換したものを公開、
それを掲示板のログをキーワードで検索するのと同じ仕組みで
検索できるようにしていたのですが、1000件を越えたら検索ができなくなってしまいました。

掲示板の過去ログも同様に、1000件越えたあたりから検索ができなくなってしまいます。
しかし、Mysqlを使えば10000件あろうが、20000件あろうが検索はできます。

自分のサイトが大量のデータを扱うことがあるのであれば
データベースを使える方がよいでしょう。
テキストデータだけでなく
イラストや写真を何百枚、何千枚も公開していて
それを検索するというのにも使えるでしょうね。
こういう場合は、イラスト1枚1枚に名前をつけて、
その名前のテキストデータをデータベースに入れて検索をするという方法をとれば可能になります。

投稿者 midilin : 09:00 AM | コメント (0)