【发布时间】:2011-11-17 01:58:26
【问题描述】:
在通过 Internet 进行了某种研究之后(以及在 Stackoverflow 上) - 我仍在努力决定哪种方法最适合我在 PHP 编程时学习/使用和挖掘更多内容。
我了解在处理 DB 时使用 DAO 的一些优势,而不是使用分布在应用程序文件中的直接 mysql_* 函数。
当谈到在 MDB2 与 PDO 之间做出决定时 - 有利于 PDO 的一件事是它不抽象 mysql_* 函数,它直接与 mysql api 对话,就像mysql_* 做。它也是 PHP 的编译 C 扩展,因此非常快。虽然 MDB2(或其他库)是用 PHP 编写的,所以它们需要在运行时解析并位于 mysql_* 函数之上。那么,就速度而言,PDO 获胜?!?
在比较 DB 抽象层与原生非抽象 PHP 方式时, DB 抽象层在使用绑定参数(准备好的语句)的方式上的安全优势,这将防止大多数 sql 注入攻击,而且如果有需要/请求,将来切换 RDBMS 类型会更容易——即使它是并不常见 - (这些 DAO 库中还有其他优点和不错的耗时功能)。
无论如何,我希望有专家可以帮助我决定我应该使用其中一个库,如果是,哪个是最推荐的?或者我应该编写自己的 DAO 库来为我服务我的项目会随着时间的推移而得到改进吗?
谢谢。
【问题讨论】:
-
PDO 可能有一个已编译的组件,但它仍然做了很多“原始”接口没有的处理。仍然有开销,但在不同的地方。您将从这里得到的唯一好的答案是尝试 pdo v.s. mdb2 对比“原始”,看看哪一个在您的特定情况下更好。
-
我确实练习过 PEAR:MDB2 - 困境在于使用其中一个库(MDB2、PDO、ADOdb ..),如果是,那么哪个是最推荐的(因为它们基本上都是用于相同的目的,但语法略有不同),或者我应该抽象我自己的 DAO - 这样我将确切地知道代码的外观,并且我可以完全控制它而不是依赖于 3rd 维度代码?!?另外,据我了解,PDO 的性能优于其他库,因为他直接与数据库通信,而不是通过一些建立在 mysql_* 函数之上的抽象来实现
-
mysql_*() 不是抽象的。它们是对底层 libmysql 客户端库的直接调用,就像 PDO 一样。 mysql_*() 只是更直接地映射到库调用。
-
是的,我确实意识到 mysql_*() 不是抽象,我所指的是 - 我应该构建自己的 DAO 库,它实际上是使用原始方法为数据库抽象层是不是吗?如果一个人创建了一个数据库类来处理他所有的应用程序数据库连接和查询/获取数据——这不是抽象数据库吗?谢谢!