mysql:5289
From: Hiroyuki OYAMA <Hiroyuki OYAMA <oyama@xxxxxxxxxx>>
Date: Mon, 1 Apr 2002 00:05:00 +0900
Subject: [mysql 05289] [rfc] Net::MySQL & DBD::mysqlPP
クレイフィッシュの小山と申します。 MySQLの通信プロトコルをなんとなくPure Perlで実装したモ ジュールNet::MySQLと、それを利用したDBIのドライバ DBD::mysqlPPを書きました。 # JDBCで言うところのType4 driver http://ymca.infoware.ne.jp/dist/Net-MySQL-0.01.tar.gz http://ymca.infoware.ne.jp/dist/DBD-mysqlPP-0.01.tar.gz libmysqlを使わずにPerlだけで実装したので、perl5.6.0以降で IO::Socketが使える環境であれば基本的にOSを問わずMySQLの daemonと*直接*通信できます。既に動作を検証できている環境は 以下の通りです。 * FreeBSD 3.4 with perl 5.6.1 build for i386-freebsd * FreeBSD 4.5 with perl 5.6.1 build for i386-freebsd * FreeBSD 4.0 with perl 5.005_03 build for i386-freebsd * Windows2000 with ActivePerl 5.6.1-build631 * MacOS X with perl 5.6.0 build for darwin * MacOS 9.x with MacPerl 5.6.1r1 NULL passwordで良ければもっと動作できる環境は広がります。さ らにIO::Socket.pmではなくSocket.pmを使うように書き換えれば WindowsCEでも動くはずです。 御意見など頂けると幸いです。 Net::MySQL ========== 対応していないもの * 圧縮プロトコル * UNIX Socketによる接続 * データベースの作成などmysqladminがやりそうな処理 #!perl use Net::MySQL; use strict; my $mysql = Net::MySQL->new( hostname => 'mysqld.example.jp', database => 'database', user => 'username', password => 'password' ); $mysql->query(q{SELECT id, name FROM table}); my $record = $mysql->create_record_iterator; while (my $column = $record->each) { printf "id=%s, name=%s\n", $column->[0], $column->[1]; } $mysql->close; __END__ DBD::mysqlPP ============ 対応していないもの * メタデータの取得 * プレースホルダの解析はテキトウ #!perl use DBI; use strict; my $dbh = DBI->connect( 'dbi:mysqlPP:hostname=mysqld.example.jp;database=database', 'username', 'password' ); my $sth = $dbh->prepare(q{SELECT id, name FROM table}); $sth->execute; while (my $col = $sth->fetchrow_arrayref) { printf "id=%s, name=%s\n", $col->[0], $col->[1]; } $dbh->disconnect; __END__ ______________ Hiroyuki OYAMA <oyama@xxxxxxxxxx> System Operations Dept. Crayfish Co.,Ltd. <http://Crayfish.CO.JP/> "PerlとRubyでYahoo!メッセンジャー" -> http://ymca.infoware.ne.jp/