Net-MySQL-0.05 > Net::MySQL

名前

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

libmysql, IO::Socket::INET

作者

Hiroyuki OYAMA <oyama@crayfish.co.jp>

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.