Kann jemand bitte etwas Licht auf das werfen, was genau DBI und DBD ist? Wann sollte einer verwendet werden und die Vorteile der Verwendung eines über dem anderen.Was ist der Unterschied zwischen DBI und DBD?
Antwort
DBI ist eine Datenbankzugriffsbibliothek, während DBDs "Treiber" sind, die von DBI für den Zugriff auf bestimmte Datenbanken verwendet werden (z. B. gibt es einen DBD für MySQL, einen anderen für PostgreSQL usw.). Sie sollten DBI lieber als DBDs direkt verwenden.
DBI ist die Schnittstelle. DBD sind die Implementierungen dieser Schnittstelle.
Vom 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
`-------' | |...
`-'
Die Kästen markiert XYZ driver
und Oracle driver
sind DBD-Module.
Ihr Code spricht also mit DBI. DBI spricht mit dem entsprechenden DBD-Modul für Ihre Datenbank. Das DBD-Modul spricht mit Ihrer Datenbank. Dies führt zu einer einzigen konsistenten Schnittstelle zu verschiedenen Datenbanken.
Verwenden Sie sie zusammen. Zum Beispiel mit 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;
Wenn Sie stattdessen auf eine Oracle Datenbank sprechen, können Sie in der Lage sein, um wegzukommen nur mit dem Argument $data_source
Wechsel zu DBI::connect
:
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password);
DBI steht für Datenbankschnittstelle. DBD steht für Datenbanktreiber.
Als Programmierer sollten Sie immer die Schnittstelle (DBI) verwenden. Die Schnittstelle wiederum verwendet den Treiber. Der Grund, DBI anstelle von DBD direkt zu verwenden, besteht darin, dass es eine konsistente Abstraktionsschicht für die Arbeit mit Datenbanken bietet. Es gibt many DBD modules, aber Sie müssen nur eine Schnittstelle lernen. Darüber hinaus ist es relativ einfach, die Datenbank, die Ihre Anwendung verwendet, durch einfaches Ändern des Treibers zu ändern. Die Schnittstelle ist dieselbe. (Die Abfragesyntax könnte etwas anders sein.)
+1 für die gute prägnante Definition. – Axeman
- 1. Was ist der Leistungsunterschied zwischen DBI fetchall_hashref und fetchall_arrayref?
- 2. Was ist der Unterschied zwischen `==` und `ist`?
- 3. Python entspricht Perls dbi/DBD :: Proxy-Zugriff? (Perl DBI/DBD :: Proxy für Python)
- 4. Was ist der Unterschied zwischen:.! und: r !?
- 5. Was ist der Unterschied zwischen Difftime und '-'?
- 6. Was ist der Unterschied zwischen $ und $$?
- 7. Was ist der Unterschied zwischen Verilog! und ~?
- 8. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 9. Was ist der Unterschied zwischen/* ... */und/** ... */
- 10. Was ist der Unterschied zwischen `&` und `ref`?
- 11. Was ist der Unterschied zwischen $ (...) und `...`
- 12. Was ist der Unterschied zwischen .Equals und ==
- 13. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 14. Was ist der Unterschied zwischen + = und = +?
- 15. Was ist der Unterschied zwischen? und ? = Nil
- 16. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 17. Was ist der Unterschied zwischen:
- 18. Was ist der Unterschied zwischen der JSP und der JSTL?
- 19. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 20. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 21. Was ist der Unterschied zwischen x86 und x64 ist
- 22. Was ist der Unterschied zwischen „ist None“ und „== None“
- 23. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist
- 24. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 25. Was ist der Unterschied zwischen RewriteRule ist und umleiten 301
- 26. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 27. Was ist der Unterschied zwischen ist HttpResponseMessage und HttpResponseException
- 28. Was ist der Unterschied zwischen nohup und kaufmännisches Und
- 29. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 30. Was ist der Unterschied zwischen Microsoft.AspNet.WebApi.OData und Microsoft.Data.OData und Microsoft.AspNet.OData?
Sortieren von. Es ist mehr wie DBI ist die externe Schnittstelle und DBD ist die interne Schnittstelle. DBD kennt DBI (theoretisch) nicht, und der Benutzer von DBI kennt die DBD nicht. – jrockway