2009-12-24 21 views

Respuesta

19

DBI es una biblioteca de acceso a la base de datos, mientras que los DBD son "controladores" que DBI utiliza para acceder a una base de datos particular (por ejemplo, hay un DBD para MySQL, otro para PostgreSQL, etc.). Debe usar DBI en lugar de DBDs directamente.

9

DBI es la interfaz. DBD son las implementaciones de esa interfaz.

+0

Tipo de. Es más como DBI es la interfaz externa, y DBD es la interfaz interna. DBD no sabe acerca de DBI (teóricamente), y el usuario de DBI no conoce el DBD. – jrockway

14

Desde el 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 
    `-------'  | |... 
        `-' 

Las cajas etiquetadas XYZ driver y Oracle driver son módulos DBD.

Así que su código habla con DBI. DBI habla con el módulo DBD apropiado para su base de datos. El módulo DBD habla con su base de datos. Esto da como resultado una interfaz única y consistente para diferentes bases de datos.

1

Úselos juntos. Por ejemplo, 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; 

Si por el contrario estás hablando con una base de datos Oracle, puede ser capaz de salirse con la cambiando sólo el $data_source argumento para DBI::connect:

$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password); 
4

DBI significa interfaz de base de datos. DBD significa controlador de base de datos.

Como programador, siempre debe usar la interfaz (DBI). La interfaz, a su vez, usa el controlador. La razón para usar DBI en lugar de usar DBD directamente es que proporciona una capa de abstracción consistente para trabajar con bases de datos. Hay many DBD modules pero solo necesita aprender una interfaz. Además, esto hace que sea relativamente fácil cambiar la base de datos que usa su aplicación simplemente cambiando el controlador. La interfaz es la misma. (La sintaxis de la consulta puede ser un poco diferente.)

+0

+1 para la buena definición concisa. – Axeman

Cuestiones relacionadas