DBI
データベースインタフェース
よく使いそうなメソッドだけを解説しているので、その他のメソッド等については、CPANを参照のこと。
use DBI;
パッケージをロードする。
my @drivers = DBI->available_drivers($quiet);
使用可能なドライバ名をリスト形式で返す。
$quiet:警告を表示しない。デフォルトは0。
my @srcs = DBI->data_sources($driver, \%attr);
使用可能なデータソース名をリスト形式で返す。文字列形式は、connectメソッドにそのまま使用できる形式(例えば、"dbi:Pg:dbname=postgres")。ドライバによっては、%attrを指定する必要がある場合がある。
my $dbh = DBI->connect($dsn, $username, $password, \%attr) || die $DBI::errstr;
データソースにCONNECTして、データベースハンドルを返す。ドライバによっては、%attrを指定する必要がある場合がある。
PostgreSQLデータベースに接続する場合:
DBD::Pgのインストールが必要。
$dsn:dbi:Pg:dbname=$dbname;host=$host;port=$port
%attr:{AutoCommit => 0, RaiseError => 1, …}
AutoCommit:0 or
1、トランザクション制御を使用せず、自動COMMITする。デフォルトは1。
RaiseError:0 or
1、エラー発生時に例外を発生させる(dieする?)。デフォルトは0。
その他、諸々。これらのパラメタは、いくつかのメソッドで指定する事もできる。
MySQLデータベースに接続する場合:
DBD::mysqlのインストールが必要。
$dsn:dbi:mysql:database=$database;host=$hostname;port=$port
%attr:{AutoCommit => 0, RaiseError => 1, …}
AutoCommit:0 or
1、トランザクション制御を使用せず、自動COMMITする。デフォルトは1。
RaiseError:0 or
1、エラー発生時に例外を発生させる(dieする?)。デフォルトは0。
その他、諸々。これらのパラメタは、いくつかのメソッドで指定する事もできる。
my $rc = $dbh->disconnect() || warn $dbh->errstr;
データソースからDISCONNECTする。アクティブなステートメントハンドルが残っていると、ワーニングが表示される。
my $sth = $dbh->prepare($statement) || die $dbh->errstr;
$statementをPREPAREし、ステートメントハンドルを返す。
$sth->bind_param($p_num, $bind_value[,\%atttr]);
PREPAREしたSQL文の?パラメタに値を代入する。$p_numは、左の?パラメタの順に1,2,3…。
my $rows = $sth->execute([@bind_values]) || die $sth->errstr;
PREPAREしたSQL文を実行する。@bind_valuesを指定すると、?パラメタの値代入と実行を同時に行なう。
正常実行された時は、実行された行数を返す。
戻り値は、UPDATEやDELETEの処理行数を意味するだけで、SELECTで検索された行数は意味しない。$sth->rowsと同じ。
my $rows = $dbh->do($statement[,\%attr[,@bind_values]]) || die $sth->errstr;
PREPAREとEXECUTEを同時に実行し、正常実行された時は、実行された行数を返す。
戻り値は、UPDATEやDELETEの処理行数を意味するだけで、SELECTで検索された行数は意味しない。$sth->rowsと同じ。
my $ary_ref = $sth->fetchrow_arrayref;
my $ary_ref = $sth->fetch; # alias
行検索結果をFETCHして配列参照を返す。全行を読み出した後か、エラーが発生した場合はundefを返す。
my @ary = $sth->fetchrow_array;
行検索結果をFETCHして配列を返す。全行を読み出した後か、エラーが発生した場合はundefを返す。
my $hash_ref = $sth->fetchrow_hashref($name);
行検索結果をFETCHしてカラム名をキーにしたハッシュ参照を返す。全行を読み出した後か、エラーが発生した場合はundefを返す。
$name:"NAME" | "NAME_lc" | "NAME_uc"、ステータスハンドルのname属性。デフォルトは、"NAME"。
my $tbl_ary_ref = $sth->fetchall_arrayref;
全ての行検索結果をFETCHして、配列リストへの参照を返す。FETCHすべきデータがない時は、空配列への参照が戻る。エラーが発生した時は、取得できたデータのみが返る。エラーの有無の判定には、$sth->errをチェックするか、RaiseErrorをtrueに設定しておく必要がある。
my $hash_ref = $sth->fetchall_hashref($key_field);
全ての行検索結果をFETCHして、ハッシュ参照を返す。FETCHすべきデータがない時は、空配列への参照が戻る。エラーが発生した時は、取得できたデータのみが返る。エラーの有無の判定には、$sth->errをチェックするか、RaiseErrorをtrueに設定しておく必要がある。
$key_field:ハッシュキーとして使用するカラム名を指定する。FETCHされたデータは、このカラムの値を一次キー・各カラム名を二次キーにしたハッシュ参照に格納される。例えば、
$dbh->{FetchHashKeyName} = 'NAME_lc'; $sth = $dbh->prepare("SELECT FOO, BAR, ID, NAME, BAZ FROM TABLE"); $sth->execute; $hash_ref = $sth->fetchall_hashref('id'); print "Name for id 42 is $hash_ref->{42}->{name}\n";
当然ながら、ユニーク属性を持っているカラムをキーに使わないと、正しい読出しは行われない。
my $rc = $sth->finish;
ステートメントハンドルをクローズする。
my $rv = $sth->rows;
直前に処理された行数を返す。
この値は、UPDATEやDELETEの処理行数を知る為にだけ使われるべきで、SELECTで検索された行数を取得する事は推奨されない。SELECT実行時に得られる値は、ドライバによってまちまちで、既にFETCHした行などを返すドライバ※もある。
※DBD::PgはSELECTされた行数を返すが、DBD::PgPPはFETCHされた行数を返す。
my $ary_ref = $dbh->selectrow_arrayref($statement [, \%attr [, @bind_values]]);
prepare,execute,fetchrow_arrayrefをワンコールで実行する。%attrは、connectの%attrと同様。
my @row_ary = $dbh->selectrow_array($statement [, \%attr [, @bind_values]]);
prepare,execute,fetchrow_arrayをワンコールで実行する。%attrは、connectの%attrと同様。
my $hash_ref = $dbh->selectrow_hashref($statement [, \%attr [, @bind_values]]);
prepare,execute,fetchrow_hashrefをワンコールで実行する。%attrは、connectの%attrと同様。
my $ary_ref = $dbh->selectall_arrayref($statement [, \%attr [, @bind_values]]);
prepare,execute,fetchall_arrayrefをワンコールで実行する。%attrは、connectの%attrと同様。
my $hash_ref = $dbh->selectall_hashref($statement, $key_field [, \%attr
[, @bind_values]]);
prepare,execute,fetchall_hashrefをワンコールで実行する。%attrは、connectの%attrと同様。
my $ary_ref = $dbh->selectcol_arrayref($statement [, \%attr [, @bind_values]]);
prepare,execute,fetchをワンコールで実行し、検索された行の先頭カラムだけを格納した配列参照を返す。%attrは、connectの%attrと同様。
my $id = $dbh->last_insert_id($catalog, $schema, $table, $field);
auto_increment または serial 型のフィールドに最後に挿入された値を返す。$catalog,
$schemaを使用していない場合は undefを渡す。挿入した値が不明の場合はundef が返る。
my $rc = $dbh->begin_work || die $dbh->errstr;
AutoCommitを一時的にoffしてトランザクションを開始する。
my $rc = $dbh->commit || die $dbh->errstr;
COMMITする。
my $rc = $dbh->rollback || die $dbh->errstr;
ROLLBACKする。
my $sth = $dbh->column_info($catalog, $schema, $table, $column);
カラム情報を取得するためのステートメントハンドルを返す。
$catalog:多くのドライバではundefを渡す。
$schema:スキーマ名。(ドライバによるが大抵は)'%FOO%'などのマッチパターン使用可能。
$table:テーブル名。(ドライバによるが大抵は)'%FOO%'などのマッチパターン使用可能。
$column:カラム名。(ドライバによるが大抵は)'%FOO%'などのマッチパターン使用可能。
ステートメントハンドルからFETCHを実行する(EXECUTEは不要)と、下記のフィールドが得られる(主なもののみ抜粋)。
TABLE_CAT:カテゴリ名
TABLE_SCHEM:スキーマ名
TABLE_NAME:テーブル名
COLUMN_NAME:カラム名
DATA_TYPE:データタイプコード
TYPE_NAME:データタイプ名
COLUMN_SIZE:カラムサイズ(値は、文字列長、桁数、ビット数、など、カラムタイプによる)
SQL_DATA_TYPE:SQLデータタイプ