Ai đó có thể làm sáng tỏ một số chính xác về DBI và DBD không? Khi nào thì nên sử dụng một và lợi ích của việc sử dụng cái này đến cái kia.Sự khác biệt giữa DBI và DBD là gì?
Trả lời
DBI là thư viện truy cập cơ sở dữ liệu, trong khi DBD là "trình điều khiển" được DBI sử dụng để truy cập cơ sở dữ liệu cụ thể (ví dụ: có một DBD cho MySQL, một DBD khác cho PostgreSQL, v.v.). Bạn nên sử dụng DBI thay vì trực tiếp DBD.
DBI là giao diện. DBD là các triển khai của giao diện đó.
Từ 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
`-------' | |...
`-'
Các hộp có nhãn XYZ driver
và Oracle driver
là DBD mô-đun.
Vì vậy, mã của bạn trao đổi với DBI. DBI nói chuyện với mô-đun DBD thích hợp cho cơ sở dữ liệu của bạn. Mô-đun DBD nói chuyện với cơ sở dữ liệu của bạn. Điều này dẫn đến một giao diện duy nhất, nhất quán cho các cơ sở dữ liệu khác nhau.
Sử dụng chúng cùng nhau. Ví dụ, với 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;
Nếu thay vào đó bạn đang nói chuyện với một cơ sở dữ liệu Oracle, bạn có thể nhận được ngay với chỉ thay đổi $data_source
lập luận để DBI::connect
:
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $password);
DBI là viết tắt của giao diện cơ sở dữ liệu. DBD là viết tắt của trình điều khiển cơ sở dữ liệu.
Là một lập trình viên, bạn nên luôn sử dụng giao diện (DBI). Giao diện, lần lượt, sử dụng trình điều khiển. Lý do để sử dụng DBI thay vì sử dụng DBD trực tiếp là nó cung cấp một lớp trừu tượng nhất quán để làm việc với các cơ sở dữ liệu. Có many DBD modules nhưng bạn chỉ cần tìm hiểu một giao diện. Ngoài ra, điều này làm cho nó tương đối dễ dàng để thay đổi cơ sở dữ liệu ứng dụng của bạn sử dụng bằng cách thay đổi trình điều khiển. Giao diện là như nhau. (Cú pháp truy vấn có thể hơi khác một chút.)
+1 cho định nghĩa ngắn gọn. – Axeman
- 1. Sự khác biệt giữa JavaBean và POJO là gì?
- 2. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 3. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 4. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 5. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 6. Sự khác biệt giữa NSInvocation và chặn là gì?
- 7. Sự khác biệt giữa fn và fn * là gì?
- 8. Sự khác biệt giữa xtype và bí danh là gì?
- 9. Sự khác biệt giữa build.sbt và build.scala là gì?
- 10. Sự khác biệt giữa localname và qname là gì?
- 11. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 12. Sự khác biệt giữa while (true) và loop là gì?
- 13. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 14. Sự khác biệt giữa uint và System.UInt32 là gì?
- 15. Sự khác biệt giữa heuristic và thuật toán là gì?
- 16. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 17. Sự khác biệt giữa \ r và \ n là gì?
- 18. Sự khác biệt giữa phần .got và .got.plt là gì?
- 19. Sự khác biệt giữa ascx và .cshtml là gì?
- 20. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 21. Sự khác biệt giữa Thông báo và pynotify là gì?
- 22. Sự khác biệt giữa to_a và to_ary là gì?
- 23. sự khác biệt giữa callback là gì và hứa
- 24. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 25. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 26. Sự khác biệt giữa isset và empty là gì?
- 27. Sự khác biệt giữa mẫu và đường dẫn là gì?
- 28. Sự khác biệt giữa "gọi" và "gọi" là gì?
- 29. Sự khác biệt giữa khẳng định và static_assert là gì?
- 30. Sự khác biệt giữa Phiên và Cookie là gì?
Sắp xếp. Nó giống DBI hơn là giao diện bên ngoài và DBD là giao diện nội bộ. DBD không biết về DBI (theo lý thuyết), và người dùng DBI không biết về DBD. – jrockway