![](/img/trans.png)
[英]What is Perl DBI difference between with bind_columns and without it?
[英]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 driver
和Oracle 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.