Qualcuno può per favore fare luce su cosa sia esattamente DBI e DBD? Quando dovrebbe essere usato uno dei due e i vantaggi dell'utilizzo di uno sull'altro.Qual è la differenza tra DBI e DBD?
risposta
DBI è una libreria di accesso al database, mentre i DBD sono "driver" che vengono utilizzati da DBI per accedere a un determinato database (ad esempio c'è un DBD per MySQL, un altro per PostgreSQL ecc.). Dovresti usare DBI piuttosto che DBD direttamente.
DBI è l'interfaccia. DBD sono le implementazioni di tale interfaccia.
Dal 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
`-------' | |...
`-'
Le scatole identificate XYZ driver
e Oracle driver
sono moduli DBD.
Quindi il tuo codice parla con DBI. DBI parla al modulo DBD appropriato per il tuo database. Il modulo DBD parla con il tuo database. Ciò si traduce in un'interfaccia unica e coerente a diversi database.
Utilizzarli insieme. Ad esempio, con 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;
Se invece stai parlando a un database Oracle, si può essere in grado di cavarsela con cambiando solo il $data_source
argomento per DBI::connect
:
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password);
DBI è sinonimo di interfaccia database. DBD è l'acronimo del driver del database.
Come programmatore, è necessario utilizzare sempre l'interfaccia (DBI). L'interfaccia, a sua volta, utilizza il driver. La ragione per usare DBI invece di usare direttamente DBD è che fornisce un livello di astrazione coerente per lavorare con i database. Ci sono many DBD modules ma devi solo imparare un'interfaccia. Inoltre, questo rende relativamente facile cambiare il database utilizzato dall'applicazione semplicemente cambiando il driver. L'interfaccia è la stessa. (La sintassi della query potrebbe essere leggermente diversa.)
+1 per la buona definizione concisa. – Axeman
Sort of. È più simile a DBI è l'interfaccia esterna e DBD è l'interfaccia interna. DBD non conosce DBI (teoricamente), e l'utente di DBI non conosce il DBD. – jrockway