2011-09-14 52 views
3

在完成了一项关于互联网的研究(以及在Stackoverflow)之后 - 我仍然在努力确定哪种方法最适合我学习/使用,在PHP编程时挖掘更多。PHP | PEAR:MDB2 vs PDO vs Native-PHP(原始)

我明白一些使用DAO的优势,当处理数据库时使用直接使用mysql_ *函数分布在应用程序文件中。

当涉及到决定MDB2与PDO - 有一件事情,PDO的闪耀是事实,它不抽象的mysql_ *函数直接与mysql的API API会谈,就像mysql_ *一样。它也是PHP编译后的C扩展,因此速度非常快。尽管MDB2(或其他库)是用PHP编写的,所以它们需要在运行时进行解析并位于mysql_ *函数之上。那么,就速度而言,PDO赢得了?!?

当谈到在本机非抽象的PHP比较DB抽象层方式眼前一亮DB抽象层的 安全优势,在使用粘合剂PARAMS(预处理语句)的方式,将防止大多数SQL注入攻击,如果有需求/请求 - 即使它不常见 - (在这些DAO库中还有其他优点和很好的时间消耗功能),将来可以更容易地切换RDBMS类型。

无论如何,我希望有专家可以帮助我决定,而我应该使用其中一个库,如果是,哪一个是最值得推荐的?或者我应该编写自己的DAO库,以便通过我所有的项目都会在几年后得到改善?

谢谢。

+0

PDO可能有一个编译组件,但它仍然做了很多处理,'原始'接口没有。仍然有开销,但在不同的地方。你会从这里得到的唯一好的答案是尝试pdo v.s. mdb2 v.s. “生”,看看哪一个在你的特定情况下更好。 –

+0

我的确练习过PEAR:MDB2 - 两难之间是使用其中一个库(MDB2,PDO,ADOdb ..),如果是这样,最好推荐哪一个(因为它们基本都是为了相同的目的而用一点语法不同的),还是我应该抽象我自己的DAO - 这样我才能确切知道代码的外观,我可以完全控制它,而不是依靠三维代码?!?另外从我所了解的PDO中执行其他库会导致他直接与数据库进行通信,而不是通过构建在mysql_ *函数之上的一些抽象 – Adam

+0

mysql _ *()不是抽象。他们直接调用底层libmysql客户端库,就像PDO一样。 mysql _ *()只是更直接地映射到库调用。 –

回答

4

问自己的问题:

  • 是我的代码的瓶颈,或者是数据库?当你对数据库进行数以千计的简单查询时,慢php代码是一个问题。当你每个请求只做几十个查询时,db层的开销可能不会很明显
  • 你是否需要切换到不同的数据库系统?如果您为有明确要求的客户完成工作,那么您很可能无论如何都会锁定DMBS,而且您不必关心互操作性。

另外,MDB2现在已经很年老了。如果我是你,我会使用Doctrines DBAL--它可以在没有Doctrine本身的情况下使用,并且它位于PDO之上。我不会使用旧的“native”mysql_ *函数。

+0

所以基本上你更喜欢在大多数情况下使用抽象层,除了那些对数据库有超过几十个查询的情况外,你建议尽可能避免使用“native:mysql _ *()”函数,即使在抽象自己的数据库类抽象层库? 从来没有听说过关于学说DBAL - 如果坐在PDO之上 - 为什么只是使用PDO,因为缺乏功能? 很好的知道MDB2是旧的,我第一次听说它。 谢谢! – Adam