В чем разница между DBI и DBD?

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


person Anand Shah    schedule 24.12.2009    source источник


Ответы (5)


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

person el.pescado    schedule 24.12.2009

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

person friedo    schedule 24.12.2009

DBI — это интерфейс. DBD являются реализациями этого интерфейса.

person Paul Tomblin    schedule 24.12.2009
comment
Вроде, как бы, что-то вроде. Это больше похоже на то, что DBI — это внешний интерфейс, а DBD — внутренний интерфейс. DBD не знает о DBI (теоретически), а пользователь DBI не знает о DBD. - person jrockway; 24.12.2009

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

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

person Michael Carman    schedule 25.12.2009

Используйте их вместе. Например, с 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);
person Greg Bacon    schedule 24.12.2009