名前¶
Net::MySQL - Perlだけで書かれたMySQLネットワークプロトコルへのインターフェイス
概要¶
use Net::MySQL;
my $mysql = Net::MySQL->new(
hostname => 'mysql.example.jp',
database => 'your_database_name',
user => 'user',
password => 'password'
);
# INSERT の例
$mysql->query(q{
INSERT INTO tablename (first, next) VALUES ('Hello', 'World')
});
printf "Affected row: %d\n", $mysql->get_affected_rows_length;
# SLECT の例
$mysql->query(q{SELECT * FROM tablename});
my $record_set = $mysql->create_record_iterator;
while (my $record = $record_set->each) {
printf "First column: %s Next column: %s\n",
$record->[0], $record->[1];
}
$mysql->close;
説明¶
Net::MySQLはPerlだけで記述されたMySQLデータベースへのクライアントインターフェイスです。MySQLのサーバとクライアント間で利用されているネットワークプロトコルを独自に実装しており、libmysqlclientなどMySQLのライブラリが無くても動作します。つまりMySQLが移植されていないOSからでもMySQLサーバに接続することができるのです。イカスッ! このモジュールは最終的にDBD::mysqlを置き換えられる物を目指しており、APIはDBIに似せています。
次のステートメントでインターフェイスを有効にします:
use Net::MySQL;
この後シンプルなオブジェクト指向のインターフェイスを使用して、複数のMySQL daemonに接続したり複数の問い合せを行うことができます。
Net::MySQLとNet::MySQL::RecordIteratorという2つのオブジェクトが利用できます。
$mysql = Net::MySQL->new(
hostname => $host,
database => $database,
user => $user,
password => $password,
);
デーモンに接続したら、次のような記述でSQLを実行することができます:
$mysql->query(q{
INSERT INTO foo (id, message) VALUES (1, 'Hello World')
});
検索結果を受け取りたい場合は、DBIで言うところのステートメントハンドルを次のような記述で生成します:
$mysql->query(q{
SELECT id, message FROM foo
});
if ($mysql->has_selected_record) {
my $a_record_iterator = $mysql->create_record_iterator;
# ...
}
このNet::MySQL::RecordIteratorオブジェクトは幾つかの目的で使用できます。とりあえず行のデータを受け取ることが出来ます:
my $record = $a_record_iterator->each;
each()メソッドは結果から1行分の情報を取り出します。戻り値はARRAYのリファレンスです。
Net::MySQL API¶
- new(HASH)
-
use Net::MySQL; use strict; my $mysql = Net::MySQL->new( hostname => $host, database => $database, user => $user, password => $password, );
Net::MySQLのコンストラクタ。MySQL daemonに接続してオブジェクトを返します。次のパラメータをハッシュで渡します。
- hostname
-
MySQL daemonを実行しているホスト名。
- port
-
MySQL daemonがlistenしているポート番号。デフォルトは3306。
- database
-
接続するデータベース名。
- user / password
-
認証に使用するユーザ名とパスワード。
- timeout
-
接続に時間がかかる場合、タイムアウトするまでの待ち時間。
- debug
-
真の値を設定すると、やり取りされているパケットを表示。
- create_database(DB_NAME)
-
create_database()メソッドは指定した名前でデータベースを新たに作成します。
$mysql->create_database('example_db'); die $mysql->get_error_message if $mysql->is_error;
- drop_database(DB_NAME)
-
drop_database()メソッドは指定した名前のデータベースを削除します。
$mysql->drop_database('example_db'); die $mysql->get_error_message if $mysql->is_error;
- query(SQL_STRING)
-
query()メソッドは指定したSQLをMySQLデータベースに送信し応答を得ます。
- create_record_iterator()
-
SQLでSELECTした場合、検索結果を表すNet::MySQL::RecordIteratorオブジェクトを返します。
$mysql->query(q{SELECT * FROM table}); my $a_record_iterator = $mysql->create_recrod_iterator();
Net::MySQL::RecordIteratorオブジェクトは検索結果の取得に利用します。詳しくは "Net::MySQL::RecordIterator API"" in "を参照してください。
- get_affected_rows_length()
-
最後に実行したSQLの影響を受けたレコード数を返します。
my $affected_rows = $mysql->get_affected_rows_length;
- get_insert_id()
-
MySQLはユーニークなキー値を自動的に生成する機能を持っています。この機能が利用された時、その新しいIDはこの属性に格納されています。
- is_error()
-
エラーがあった場合、真を返す。
- has_selected_record()
-
SELECT文による検索結果がある場合、真を返す。
- get_field_length()
-
カラム数を返す。
- get_fiend_names()
-
カラムの名前を配列で返す。
- close()
-
MySQL daemonに終了メッセージを送り、Socketを閉じます。
Net::MySQL::RecordIterator API¶
Net::MySQL::RecordIteratorオブジェクトは、Net::MySQLオブジェクトのquery()メソッドで生成されます。公開されているコンストラクタメソッドはありません。
- each()
-
each()メソッドは検索結果から順番に1行だけ取り出し、それをARRAYのリファレンスで返します。全ての行を取り出したならば
undef
を返します。while (my $record = $a_record_iterator->each) { printf "Column 1: %s Column 2: %s Collumn 3: %s\n", $record->[0], $record->[1], $record->[2]; }
SUPPORT OPERATING SYSTEM¶
このモジュールは次のOSでテストされました。
MacOS 9.x
with MacPerl5.6.1r.
MacOS X
with perl5.6.0 build for darwin.
Windows2000
with ActivePerl5.6.1 build631.
FreeBSD 3.4 and 4.x
with perl5.6.1 build for i386-freebsd.
with perl5.005_03 build for i386-freebsd.
私はperlと IO::Socket::INETモジュールがあれば動作すると信じています。マイナーなOSでの動作報告をもらえるたらすごく嬉しいでしょう。
SEE ALSO¶
作者¶
Hiroyuki OYAMA <[email protected]>
COPYRIGHT AND LICENCE¶
Copyright (C) 2002 Hiroyuki OYAMA. Japan. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.