Каково различие между DBI и DBD?

Кто-то может пролить некоторый свет на то, что такое точно DBI и DBD? Когда должен любой один использоваться и преимущества использования того по другому.

8
задан Anand Shah 24 December 2009 в 01:55
поделиться

5 ответов

DBI - библиотека доступа к БД, в то время как DBD - это "драйверы", которые используются DBI для доступа к конкретной БД (например, есть одна БД для MySQL, другая для PostgreSQL и т.д.). Вы должны напрямую использовать DBI, а не DBD.

.
21
ответ дан 3 November 2019 в 12:13
поделиться

DBI обозначает интерфейс базы данных . DBD означает драйвер БД .

Как программист Вы всегда должны использовать интерфейс (DBI). Интерфейс, в свою очередь, использует драйвер. Причина использования DBI вместо непосредственного использования DBD заключается в том, что он обеспечивает последовательный уровень абстракции для работы с БД. Существует много модулей DBD , но вам нужно изучить только один интерфейс. Кроме того, это позволяет относительно легко изменить БД, используемую вашим приложением, просто изменив драйвер. Интерфейс остался прежним. (Синтаксис запроса может немного отличаться.)

.
4
ответ дан 3 November 2019 в 12:13
поделиться

Из документов 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 взаимодействует с вашей базой данных. В результате получается единый, согласованный интерфейс к различным базам данных.

16
ответ дан 3 November 2019 в 12:13
поделиться

Используйте их вместе. Например, с помощью 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);
1
ответ дан 3 November 2019 в 12:13
поделиться

DBI - это интерфейс. Реализации этого интерфейса - БД.

.
9
ответ дан 3 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: