2009-12-24 10 views

Antwort

19

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.

9

DBI ist die Schnittstelle. DBD sind die Implementierungen dieser Schnittstelle.

+0

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

14

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.

1

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); 
4

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.)

+0

+1 für die gute prägnante Definition. – Axeman

Verwandte Themen