9

誰かがDBIとDBDが正確に何であるかを明らかにしてもらえますか? いずれかを使用する必要がある場合と、一方を他方よりも使用する利点。

4

5 に答える 5

21

DBIはデータベースアクセスライブラリですが、DBDは、特定のデータベースにアクセスするためにDBIによって使用される「ドライバー」です(たとえば、MySQL用に1つ、PostgreSQL用に別のDBDがあります)。DBDではなくDBIを直接使用する必要があります。

于 2009-12-24T12:16:04.433 に答える
18

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 DriverOracle DriverDBD モジュールです。

したがって、コードは DBI と対話します。DBI は、データベースに適した DBD モジュールと対話します。DBD モジュールはデータベースと通信します。これにより、異なるデータベースへの単一の一貫したインターフェイスが実現します。

于 2009-12-24T18:50:31.967 に答える
9

DBI はインターフェイスです。DBD はそのインターフェースの実装です。

于 2009-12-24T12:00:59.620 に答える
4

DBIはデータベースインターフェイスの略です。DBDはデータベースドライバの略です。

プログラマーとして、常にインターフェース(DBI)を使用する必要があります。次に、インターフェースはドライバーを使用します。DBDを直接使用する代わりにDBIを使用する理由は、データベースを操作するための一貫した抽象化レイヤーを提供するためです。多くのDBDモジュールがありますが、学習する必要があるのは1つのインターフェースだけです。さらに、これにより、ドライバーを変更するだけで、アプリケーションが使用するデータベースを比較的簡単に変更できます。インターフェースは同じです。(クエリの構文は少し異なる場合があります。)

于 2009-12-25T02:36:13.553 に答える
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);
于 2009-12-24T20:34:49.247 に答える