![](/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.