Кто-то может пролить некоторый свет на то, что такое точно DBI и DBD? Когда должен любой один использоваться и преимущества использования того по другому.
DBI - библиотека доступа к БД, в то время как DBD - это "драйверы", которые используются DBI для доступа к конкретной БД (например, есть одна БД для MySQL, другая для PostgreSQL и т.д.). Вы должны напрямую использовать DBI, а не DBD.
.DBI обозначает интерфейс базы данных . DBD означает драйвер БД .
Как программист Вы всегда должны использовать интерфейс (DBI). Интерфейс, в свою очередь, использует драйвер. Причина использования DBI вместо непосредственного использования DBD заключается в том, что он обеспечивает последовательный уровень абстракции для работы с БД. Существует много модулей DBD , но вам нужно изучить только один интерфейс. Кроме того, это позволяет относительно легко изменить БД, используемую вашим приложением, просто изменив драйвер. Интерфейс остался прежним. (Синтаксис запроса может немного отличаться.)
.Из документов DBI:
│←−− 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
└─────────┘ │ ├── ∙∙∙
└───┘
Коробки с метками XYZ Driver
и Oracle Driver
являются модулями DBD.
Таким образом, ваш код обращается к DBI. DBI обращается к соответствующему модулю DBD для вашей базы данных. Модуль DBD взаимодействует с вашей базой данных. В результате получается единый, согласованный интерфейс к различным базам данных.
Используйте их вместе. Например, с помощью 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;
Если вместо этого вы говорите с базой данных Oracle, то вы сможете обойтись без изменения только аргумента $data_source
на DBI::connect
:
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password);
DBI - это интерфейс. Реализации этого интерфейса - БД.
.