¿Puede alguien arrojar algo de luz sobre qué es exactamente DBI y DBD? ¿Cuándo se debe usar uno y los beneficios de usar uno sobre el otro?¿Cuál es la diferencia entre DBI y DBD?
Respuesta
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.
DBI es la interfaz. DBD son las implementaciones de esa interfaz.
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.
Ú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);
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.)
+1 para la buena definición concisa. – Axeman
- 1. ¿Cuál es la diferencia de rendimiento entre fetchall_hashref y fetchall_arrayref de DBI?
- 2. ¿Cuál es la diferencia entre " " y ""?
- 3. ¿cuál es la diferencia entre:.! y: r !?
- 4. ¿Cuál es la diferencia entre ".equals" y "=="?
- 5. Cuál es la diferencia entre = y: =
- 6. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 7. ¿Cuál es la diferencia entre .ToString (+) y ""
- 8. Cuál es la diferencia entre $ (...) y `...`
- 9. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 10. ¿Cuál es la diferencia entre + = y = +?
- 11. ¿Cuál es la diferencia entre dict() y {}?
- 12. Cuál es la diferencia entre $ y jQuery
- 13. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 14. ¿Cuál es la diferencia entre {0} y ""?
- 15. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 16. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 17. Cuál es la diferencia entre la función() {}() y la función() {}()
- 18. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 19. ¿Cuál es la diferencia entre `use base` y @ISA en Perl?
- 20. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 21. ¿Cuál es la diferencia entre la carpeta vim72 y vimfiles?
- 22. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 23. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 24. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 25. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 26. ¿Cuál es la diferencia entre la sección .got y .got.plt?
- 27. ¿cuál es la diferencia entre el material y la textura?
- 28. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 29. ¿Cuál es la diferencia entre el casting y la conversión?
- 30. ¿Cuál es la diferencia entre uno mismo y la ventana?
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