簡體   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