代码之家  ›  专栏  ›  技术社区  ›  Anand Shah

DBI和DBD有什么区别?

  •  6
  • Anand Shah  · 技术社区  · 16 年前

    有人能解释一下什么是DBI和DBD吗?应该在何时使用其中一个,以及使用其中一个的好处。

    5 回复  |  直到 16 年前
        1
  •  20
  •   el.pescado - нет войне    16 年前

    DBI是数据库访问库,而DBD是DBI用来访问特定数据库的“驱动程序”(例如,有一个DBD用于MySQL,另一个DBD用于PostgreSQL等)。您应该直接使用DBI而不是DBD。

        2
  •  15
  •   friedo    16 年前

    DBI docs :

                 |<- 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模块与数据库对话。这将导致与不同数据库的单一、一致的接口。

        3
  •  9
  •   Paul Tomblin    16 年前

    DBI是接口。DBD是该接口的实现。

        4
  •  4
  •   Michael Carman    16 年前

    DBI代表 数据库接口 . DBD代表 数据库驱动程序 .

    作为程序员,您应该始终使用接口(DBI)。接口反过来使用驱动程序。使用DBI而不是直接使用DBD的原因是它为使用数据库提供了一致的抽象层。有 many DBD modules 但是你只需要学习一个界面。此外,通过简单地更改驱动程序,这使得更改应用程序使用的数据库相对容易。接口是相同的。(查询语法可能稍有不同。)

        5
  •  1
  •   Greg Bacon    16 年前

    一起使用。例如,使用 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);