繁体   English   中英

DBI和DBD有什么区别?

[英]What is the difference between DBI and DBD?

有人可以了解一下DBI和DBD究竟是什么? 什么时候应该使用一个和使用一个优于另一个的好处。

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

来自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 driver的框是DBD模块。

所以你的代码与DBI对话。 DBI与您的数据库的相应DBD模块进行对话。 DBD模块与您的数据库通信。 这导致与不同数据库的单一,一致的接口。

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

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

作为程序员,您应该始终使用接口(DBI)。 反过来,接口使用驱动程序。 使用DBI而不是直接使用DBD的原因是它为处理数据库提供了一致的抽象层。 许多DBD模块,但您只需要学习一个接口。 此外,通过简单地更改驱动程序,可以相对轻松地更改应用程序使用的数据库。 界面是一样的。 (查询语法可能略有不同。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM