誰かがDBIとDBDが正確に何であるかを明らかにしてもらえますか? いずれかを使用する必要がある場合と、一方を他方よりも使用する利点。
5 に答える
DBIはデータベースアクセスライブラリですが、DBDは、特定のデータベースにアクセスするためにDBIによって使用される「ドライバー」です(たとえば、MySQL用に1つ、PostgreSQL用に別のDBDがあります)。DBDではなくDBIを直接使用する必要があります。
DBI ドキュメントから:
│←−− Scope of DBI −−→│
┌───┐ ┌─────────────────┐ ┌─────────────────┐
┌─────────┐ │ ├──┤ XYZ Driver ├──┤ XYZ Engine │
│ Perl │ │ │ └─────────────────┘ └─────────────────┘
│ script │ │ A │ │ D │ ┌─────────────────┐ ┌─────────────────┐
│ using ├──┤ P ├──┤ B ├──┤ Oracle Driver ├──┤ Oracle Engine │
│ DBI │ │ I │ │ I │ └─────────────────┘ └─────────────────┘
│ API │ │ ├── ∙∙∙
│ methods │ │ ├── ∙∙∙ Other drivers
└─────────┘ │ ├── ∙∙∙
└───┘
とのラベルが付いたボックスはXYZ Driver
、Oracle Driver
DBD モジュールです。
したがって、コードは DBI と対話します。DBI は、データベースに適した DBD モジュールと対話します。DBD モジュールはデータベースと通信します。これにより、異なるデータベースへの単一の一貫したインターフェイスが実現します。
DBI はインターフェイスです。DBD はそのインターフェースの実装です。
DBIはデータベースインターフェイスの略です。DBDはデータベースドライバの略です。
プログラマーとして、常にインターフェース(DBI)を使用する必要があります。次に、インターフェースはドライバーを使用します。DBDを直接使用する代わりにDBIを使用する理由は、データベースを操作するための一貫した抽象化レイヤーを提供するためです。多くのDBDモジュールがありますが、学習する必要があるのは1つのインターフェースだけです。さらに、これにより、ドライバーを変更するだけで、アプリケーションが使用するデータベースを比較的簡単に変更できます。インターフェースは同じです。(クエリの構文は少し異なる場合があります。)
一緒に使用してください。たとえば、MySQLの場合:
use DBI;
$dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
$dbh = DBI->connect($dsn, $user, $password);
$sth = $dbh->prepare("SELECT * FROM foo WHERE bla");
$sth->execute;
代わりにOracleデータベースと話している場合は、$data_source
引数を に変更するだけで済む場合がありDBI::connect
ます。
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password);