DBI の概要
プログラムにCや C++、Java 、Perlなどの種類があるように、データベースにもオラクルやSQLサーバ、MySQLなどの種類があります。Perlやそのほかのプログラミング言語には、これらの組み合わせひとつひとつに独自の通信機能を実装する代わりに、『DBI(データベース・インタフェイス)』という共通の通信手段を提供しています。
DBIは プログラミング言語からデータベースにアクセスするための『API(アプリケーション・プログラム・インターフェース)』で、データベースにアクセスするための手段と、データベースの種類に依存しないインターフェイスを提供します。データベースの種類に依存しないということは、どのデータベースも同じ方法で操作することができるということです。MySQL、オラクル、インフォミックス、あるいは他のどんなデータベースに接続するときも、DBMSの基本構造を知る必要はありません。DBIによって定義されているAPIだけをマスターすればよいのです。
次の図は、プログラミング言語からAPIを通じて、MySQLやオラクルなどのデータベースに接続するまでの流れを表しています。

図にあるように、プログラムからアクセスするのはAPIだけです。MySQLやオラクルなどのDBMSに直接命令する役目は、そのアプリケーション用のドライバが請け負っています。このようにAPIを通じてのデータベース操作は、APIだけをマスターすればよいという制作上の利点に加え、データベースのバージョンアップや、データベース自体の変更でさえ手間を掛けることなく実現することができるという運営上の利点もあります。
表記と規約
| DBI | 静的トップレベルのクラス名 |
|---|---|
| $dbh | データベースハンドルオブジェクト |
| $sth | ステートメントハンドルオブジェクト |
| $drh | ドライバハンドルオブジェクト |
| $h | 上記のハンドルのいずれか |
| $rc | 一般的な返りコード (ブール: 真=成功、偽=エラー) |
| $rv | 一般的な返り値 (典型的に整数) |
| @ary | データベースから返される値のリスト。通常はデータの行 |
| $rows | 処理された行の数 (なければ-1) |
| $fh | ファイルハンドル |
| undef | Perl では NULL は未定義( undef ) |
| \%attr | メソッドに渡される属性値のハッシュのリファレンス |
一般的なインタフェース規則と注意
セッション
DBIは、セッションの概念を持っていません。すべてのセッションはconnectメソッドから返されるハンドル・オブジェクト($dbh)を持ち、このハンドル・オブジェクトは、データベースに関連するメソッドを起動するために使用されます。
文字列と数値
ほとんどのデータは文字列としてPerlスクリプトに返されます(NULL値はundefとして返される)。これにより数値データの精度を落とすことなく扱うことができます。文字列が数として使用される場合、Perlは同じ精度を保てない可能性があります。
日付と時間
日付と時間は、対応するデータベースエンジンの書式で返されます。
バイナリデータのサポート
Perlスクリプトは文字列のなかにあるバイナリデータをサポートします。DBIはバイナリデータを変更することなく、ドライバとやりとりします。バイナリデータの扱いはドライバの実装方法に依存します。
SQLステートメント
複数のSQLステートメントを単一のステートメント・ハンドル($sth)中で組み合わせることはできません。