移植可能な DBI メソッドおよび属性
メソッド/属性 | 説明 |
connect |
データベースサーバへの接続を確立する。 |
disconnect |
データベースサーバへの接続を切断する。 |
prepare |
SQL ステートメントを実行するためのプリコンパイルを行う。 |
execute |
プリペアドステートメントを実行する。 |
do |
SQL ステートメントをプリコンパイルし、実行する。 |
quote |
挿入する文字列または BLOB
値を引用符で囲む。 |
fetchrow_array |
フィールドの配列として次のレコードを取得する。 |
fetchrow_arrayref |
フィールドの参照配列として次のレコードを取得する。 |
fetchrow_hashref |
ハッシュテーブルへの参照として次のレコードを取得する。 |
fetchall_arrayref |
配列の配列としてすべてのデータを取得する。 |
finish |
ステートメントの使用を完了して、リソースを解放する。 |
rows |
影響を受けたレコードの数を返す。 |
data_sources |
localhost で使用できるデータベースの配列を返す。 |
ChopBlanks |
fetchrow_*
メソッドで余白を切り取るかどうかを制御する。 |
NUM_OF_PARAMS |
プリペアドステートメントのプレースホルダの数。 |
NULLABLE |
どのカラムに NULL
を格納できるかを示す。 |
trace |
デバッグのためにトレースを実行する。 |
MySQL 固有のメソッドおよび属性
メソッド/属性 | 説明 |
mysql_insertid |
最新の AUTO_INCREMENT 値を返す。 |
is_blob |
どのカラムが BLOB 値かを示す。 |
is_key |
どのカラムがキーかを示す。 |
is_num |
どのカラムが数値かを示す。 |
is_pri_key |
どのカラムが主キーかを示す。 |
is_not_null |
どのカラムに NULL
を格納できないかを示す。NULLABLE
を参照。 |
length |
拡大可能な最大カラムサイズを示す。 |
max_length |
結果セットに実際に存在する最大のカラムサイズを示す。 |
NAME |
カラム名を示す。 |
NUM_OF_FIELDS |
結果セットのフィールドの数。 |
table |
結果セットのテーブル名を示す。 |
type |
すべてのカラムの型を示す。 |
Perl のメソッドについては、以下のセクションで詳細に説明します。メソッドの戻り値に使用される変数には以下の意味があります。
$dbh
データベースハンドル
$sth
ステートメントハンドル
$rc
リターンコード(通常はステータス)
$rv
戻り値(通常はレコード数)
移植可能な DBI メソッドおよび属性
connect($data_source, $username,
$password)
connect
メソッドを使用して、データソースへのデータベース接続を確立する。$data_source
値は DBI:driver_name:
で始まる必要がある。DBD::mysql
ドライバを使用する connect
の使用例を以下に示す。
$dbh = DBI->connect("DBI:mysql:$database", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user, $password);
ユーザ名またはパスワード、あるいはその両方が未定義の場合、DBI
はそれぞれ DBI_USER
および
DBI_PASS
の各環境変数の値を使用する。ホスト名を指定しない場合、'localhost'
が使用される。ポート番号を指定しない場合、デフォルトの
MySQL ポート(3306)が使用される。
Msql-Mysql-modules
バージョン 1.2009
の時点では、$data_source
値に特定の修飾子を使用できる。
mysql_read_default_file=file_name
file_name
をオプション設定ファイルとして読み込む。オプション設定ファイルについては、項4.1.2. 「my.cnf
オプション設定ファイル」
を参照すること。
mysql_read_default_group=group_name
オプション設定ファイルを読み込むときのデフォルトグループは、通常は
[client]
グループである。mysql_read_default_group
オプションを指定することによって、デフォルトグループは
[group_name]
グループになる。
mysql_compression=1
クライアントとサーバ間で圧縮された通信を使用する(MySQL バージョン 3.22.3 以降)。
mysql_socket=/path/to/socket
サーバへの接続に使用する Unix ソケットのパス名を指定する(MySQL バージョン 3.21.15 以降)。
複数の修飾子をセミコロンで区切って指定できる。
たとえば、ユーザ名およびパスワードを
DBI
スクリプトにハードコードすることを避けるには、以下のように
connect
の呼び出しを記述して、ユーザの
~/.my.cnf
オプション設定ファイルからユーザ名およびパスワードを読み込む。
$dbh = DBI->connect("DBI:mysql:$database" . ";mysql_read_default_file=$ENV{HOME}/.my.cnf", $user, $password);
この呼び出しによって、オプション設定ファイルの
[client]
グループに定義されたオプションが読み込まれる。上記と同じ処理を、[perl]
グループに指定したオプションを使用して実行するには、以下のようなコードを記述する。
$dbh = DBI->connect("DBI:mysql:$database" . ";mysql_read_default_file=$ENV{HOME}/.my.cnf" . ";mysql_read_default_group=perl", $user, $password);
disconnect
disconnect
メソッドは、データベースからデータベースハンドルを切断する。通常、このメソッドはプログラムを終了する直前に呼び出される。以下に例を示す。
$rc = $dbh->disconnect;
prepare($statement)
SQL
ステートメントを、データベースで実行できるようにプリコンパイルし、ステートメントハンドル
($sth)
を返す。ステートメントハンドルを使用して
execute
メソッドを呼び出すことができる。
通常、prepare
および
execute
を使用して
SELECT
ステートメント(および
SHOW
、DESCRIBE
、EXPLAIN
などの SELECT
ライクなステートメント)を処理する。以下に例を示す。
$sth = $dbh->prepare($statement) or die "Can't prepare $statement: $dbh->errstr\n";
サイズの大きい結果セットをクライアントに読み込む場合、Perl
に mysql_use_result()
を使用するように指示できる。
my $sth = $dbh->prepare($statement { "mysql_use_result" => 1});
execute
execute
メソッドは、プリペアドステートメントを実行する。非
SELECT
ステートメントの場合、execute
は影響を受けたレコードの数を返す。影響を受けたレコードがない場合、execute
は "0E0"
を返す。Perl
はこの戻り値を 0 として処理するが、true
とみなす。エラーが発生した場合、execute
は undef
を返す。SELECT
ステートメントの場合、execute
はデータベースで SQL
クエリを起動するだけであり、データを取得するには、後述する
fetch_*
メソッドの中の 1
つを使用する必要がある。以下に例を示す。
$rv = $sth->execute or die "can't execute the query: " . $sth->errstr;
do($statement)
do
メソッドは、SQL
ステートメントをプリコンパイルおよび実行し、影響を受けたレコード数を返す。影響を受けたレコードがない場合、do
は "0E0"
を返す。Perl
はこの戻り値を 0 として処理するが、true
とみなす。このメソッドは通常、あらかじめプリコンパイルできない(ドライバの制約により)、または複数回実行する必要がない(挿入、削除など)非
SELECT
ステートメントで使用する。以下に例を示す。
$rv = $dbh->do($statement) or die "Can't execute $statement: $dbh- >errstr\n";
一般に、'do' ステートメントは、パラメータを使用しないステートメントをプリコンパイルして実行するよりも、非常に高速である(使用することが推奨される)。
quote($string)
quote
メソッドは、文字列に含まれる特殊文字を
"エスケープ"
して、引用符で囲むために使用する。以下に例を示す。
$sql = $dbh->quote($string)
fetchrow_array
このメソッドは、次のレコードのデータを取得し、フィールド値の配列として返す。以下に例を示す。
while(@row = $sth->fetchrow_array) { print qw($row[0]\t$row[1]\t$row[2]\n); }
fetchrow_arrayref
このメソッドは、次のレコードのデータを取得し、フィールド値の配列として返す。以下に例を示す。
while($row_ref = $sth->fetchrow_arrayref) { print qw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n); }
fetchrow_hashref
このメソッドは、レコードデータを取得し、フィールド名と値の組み合わせを含むハッシュテーブルへの参照を返す。これは前述の配列参照を使用する場合ほど効率的ではない。以下に例を示す。
while($hash_ref = $sth->fetchrow_hashref) { print qw($hash_ref->{firstname}\t$hash_ref->{lastname}\t\ $hash_ref->{title}\n); }
fetchall_arrayref
このメソッドは、SQL ステートメントが返すすべてのデータ(レコード)を取得するために使用する。このメソッドは、"各レコードに対応する配列への参照" の配列への参照を返す。データにアクセスしたり、出力するには、ネストされたループを使用する。以下に例を示す。
my $table = $sth->fetchall_arrayref or die "$sth->errstr\n"; my($i, $j); for $i ( 0 .. $#{$table} ) { for $j ( 0 .. $#{$table->[$i]} ) { print "$table->[$i][$j]\t"; } print "\n"; }
finish
このステートメントハンドルを使用してこれ以上データを取得しないことを示す。このメソッドを呼び出すことによって、ステートメントハンドルおよびそれに関連付けられたシステムリソースがすべて解放される。以下に例を示す。
$rc = $sth->finish;
rows
最後に実行されたコマンドによって影響を受けた(更新された、削除された、など)レコードの数を返す。通常、非
SELECT
execute
ステートメントの後に使用される。以下に例を示す。
$rv = $sth->rows;
NULLABLE
カラムに NULL
値を格納できるかどうかを示す値の配列への参照を返す。各配列要素に格納できる値は、カラムに
NULL
値を格納できない場合は 0
または空文字列、格納できる場合は
1、カラムの NULL
ステータスが不明な場合は 2
である。以下に例を示す。
$null_possible = $sth->{NULLABLE};
NUM_OF_FIELDS
この属性は、SELECT
ステートメントまたは SHOW
FIELDS
ステートメントが返したフィールドの数を示す。これを使用して、結果セットを返すステートメントが実行されたかどうかを調べることができる。値が
0
の場合は、INSERT
、DELETE
、または
UPDATE
などの非
SELECT
ステートメントが実行されたことを示す。以下に例を示す。
$nr_of_fields = $sth->{NUM_OF_FIELDS};
data_sources($driver_name)
このメソッドは、ホスト
'localhost'
上で動作する MySQL
サーバに対して使用できるデータベース名を含む配列を返す。以下に例を示す。
@dbs = DBI->data_sources("mysql");
ChopBlanks
この属性は、fetchrow_*
メソッドが、返された値の先頭および末尾の空白を切り取るかどうかを決定する。以下に例を示す。
$sth->{'ChopBlanks'} =1;
trace($trace_level)
,
trace($trace_level, $trace_filename)
trace
メソッドはトレースを有効または無効にする。DBI
クラスメソッドとして呼び出された場合は、すべてのハンドルのトレースを有効または無効にする。データベースまたはステートメントハンドルのメソッドとして呼び出された場合は、指定されたハンドル(およびそのハンドルから今後派生する子)のトレースを有効または無効にする。$trace_level
を 2
に設定すると、詳細なトレース情報が出力される。$trace_level
を 0
に設定すると、トレースが無効になる。トレース情報は、デフォルトでは標準エラー出力に出力される。$trace_filename
が指定された場合、そのファイルが追加モードで開かれ、トレースが有効なすべてのハンドルのトレース情報がそのファイルに出力される。以下に例を示す。
DBI->trace(2); # trace everything DBI->trace(2,"/tmp/dbi.out"); # trace everything to # /tmp/dbi.out $dth->trace(2); # trace this database handle $sth->trace(2); # trace this statement handle
また、DBI_TRACE
環境変数を設定することによって
DBI
トレースを有効にできる。この変数に数値を設定することは、DBI->(value)
を呼び出すことと同等である。この変数にパス名を設定することは、DBI->(2,value)
を呼び出すことと同等である。
MySQL 固有のメソッドおよび属性
ここに示すメソッドは MySQL
固有であり、DBI
の標準には含まれません。is_blob
、is_key
、is_num
、is_pri_key
、is_not_null
、length
、max_length
、table
など、その多くは廃止されています。DBI
標準に代替できるメソッドや属性が存在する場合は、ここに明記します。
mysql_insertid
MySQL の AUTO_INCREMENT
機能を使用する場合、最新の値がここに格納される。以下に例を示す。
$new_id = $sth->{mysql_insertid};
古いバージョンの DBI
インタフェースでは、$sth->{'insertid'}
を使用できる。
is_blob
ブール値の配列への参照を返す。配列の要素が
TRUE の場合、対応するカラムが
BLOB
型であることを示す。以下に例を示す。
$keys = $sth->{is_blob};
is_key
ブール値の配列への参照を返す。配列の要素が TRUE の場合、対応するカラムがキーであることを示す。以下に例を示す。
$keys = $sth->{is_key};
is_num
ブール値の配列への参照を返す。配列の要素が TRUE の場合、対応するカラムに数値が格納されることを示す。以下に例を示す。
$nums = $sth->{is_num};
is_pri_key
ブール値の配列への参照を返す。配列の要素が TRUE の場合、対応するカラムが主キーであることを示す。以下に例を示す。
$pri_keys = $sth->{is_pri_key};
is_not_null
ブール値の配列への参照を返す。配列の要素が
FALSE の場合、対応するカラムに
NULL
値を格納できることを示す。以下に例を示す。
$not_nulls = $sth->{is_not_null};
is_not_null
は廃止されている。DBI 標準の
NULLABLE
属性(前述)を使用することが推奨される。
length
, max_length
各メソッドは、カラムサイズの配列への参照を返す。length
の配列は、各カラムの(テーブル定義での宣言に従った)拡大可能な最大サイズを示す。max_length
の配列は、結果テーブルに実際に存在するデータの最大サイズを示す。以下に例を示す。
$lengths = $sth->{length}; $max_lengths = $sth->{max_length};
NAME
カラム名の配列への参照を返す。以下に例を示す。
$names = $sth->{NAME};
table
テーブル名の配列への参照を返す。以下に例を示す。
$tables = $sth->{table};
type
カラムのデータ型の配列への参照を返す。以下に例を示す。
$types = $sth->{type};
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.