迄今为止最好的PHP DAL(数据抽象层)

时间:2011-10-18 13:18:57

标签: php database database-abstraction

迄今为止在任何开源项目下开发的最佳PHP DAL(数据抽象层)是什么?我们可以善意地重复使用它们?

我发现很难为我的应用程序选择一个DAL,它足以支持对大多数常见数据库系统(MySQL,PostgreSQL,MSSQL,Oracle等)的抽象,并且是:

  1. 受到广泛测试,
  2. 具有良好的界面(可读的方法名称,良好的参数传递策略),
  3. 快,
  4. 轻量级,
  5. 提供缓存(例如与Memcache集成或支持良好的缓存机制),
  6. 开源许可证,
  7. 应至少具有适用于MySQL / MySQLi(非基于PDO)的适配器
  8. 要考虑的一些图书馆:

    请不要考虑:

    • PDO
    • 所有ORM(但是,除了ORM,Doctrine似乎还有一个单独的DAL)

7 个答案:

答案 0 :(得分:11)

如果您可以使用PHP 5.3,我强烈推荐Doctrine DAL,它建立在PDO之上,因此您可以获得相同的性能和优秀的API。

更新:如果学说不好,您可以尝试MDB2。它具有大多数流行的RDBMS的驱动程序,强大的API,出色的文档和庞大的用户群:

  • MySQL的
  • MySQLi(仅限PHP5)
  • 的PostgreSQL
  • 甲骨文
  • Frontbase
  • Interbase / Firebird(仅限PHP5)
  • MSSQL
  • SQLite的

答案 1 :(得分:3)

过去1年我一直在使用Zend_Db作为我的网络应用程序。我认为,Zend Framework是迄今为止最好的。

Zend是由PHP的核心贡献者开始的。(1)

  

经过广泛测试

是。它被成千上万的项目使用,并且拥有一个活跃的开发者社区。

  

具有良好的界面(可读的方法名称,好      参数传递策略)

是。所有组件均可根据您的需求轻松定制。 Zend中的每个组件都是松散耦合的,这意味着您可以使用任何组件而不依赖于框架中的任何其他组件。

  

速度

是。 Zend_Db默认使用PDO。

  

轻质

  

提供缓存(例如与memcache集成或支持良好的缓存机制)

Zend有extensive caching system

  

开源许可证

要访问数据库表,您只需要通过将表名及其主键设置为字段来为其创建类。

class User extends Zend_Db_Table {

    protected $_name = "users";  //tablename
    protected $_primary = "user_key"; //primary key column

    function addNewUser($name,$age,$email) {
          //Validate input and add Logic to add a new user
          //Methods are available to insert data like $this->insert($data)
          // where $data is an array of column names and values
          // Check links below for documentation
    }
}

这称为模型。在此课程中,您可以创建与“用户”实体相关的所有方法,例如添加新用户,编辑用户等。

在您的应用程序代码中,您可以将其用作

$u = new User();
$u->addNewUser('Name','Age','email');

必须阅读此内容 - http://framework.zend.com/manual/en/zend.db.table.html

更多参考here。 有关详细信息,请查看此relation question

答案 2 :(得分:2)

我对Propel有很好的经验。 Doctrine是类似的,我听到了很多相关信息,但我没有经验。

答案 3 :(得分:2)

我在使用doctrine DBAL时遇到了一些麻烦,主要是使用架构/数据库/表创建,它有些错误,有些文档与实际接口和类方法有所不同(我确实阅读了正确的版本文档),我不得不使用原始的sql语句来处理其中的一些事情 其他一切似乎都很好,这是一个小项目,所以我没有使用DBAL提供的所有功能原理。

注意: 我在大约一年前用最新的稳定版本的DBAL和php进行了修改,也许这些问题现在已经解决了。

答案 4 :(得分:2)

Doctrine 2.0是市场上最好的,因为它受到Zend框架,Symfony等最顶层框架的支持。

它还支持像mangodb等的nosql db ...

它具有内置缓存系统,可以提升应用程序。

它还具有分页,查询构建器等扩展支持

以下是推进和学说的一些bechmarks结果

                               | Insert | findPk | complex| hydrate|  with  |
                               |--------|--------|--------|--------|--------|
                  PDOTestSuite |    132 |    149 |    112 |    107 |    109 |
             Propel14TestSuite |    953 |    436 |    133 |    270 |    280 |
        Propel15aLa14TestSuite |    926 |    428 |    143 |    264 |    282 |
             Propel15TestSuite |    923 |    558 |    171 |    356 |    385 |
    Propel15WithCacheTestSuite |    932 |    463 |    189 |    342 |    327 |
           Doctrine12TestSuite |   1673 |   2661 |    449 |   1710 |   1832 |
  Doctrine12WithCacheTestSuite |   1903 |   1179 |    550 |    957 |    722 |
            Doctrine2TestSuite |    165 |    426 |    412 |   1048 |   1042 |
   Doctrine2WithCacheTestSuite |    176 |    423 |    148 |    606 |    383 |

这些是对Doctrine 2结果的重要观察。

在最后两个记录中看到性能如何随着doctrine 2.0而增加......

答案 5 :(得分:2)

如果您只需要使用MySQL,DALMP Database Abstraction Layer for MySQL using PHP.可以是一个选项

与cache / memcache / redis一起使用,并且会话处理非常简单和轻松。

答案 6 :(得分:1)

Zend_Db怎么样?缓存你唯一需要Zend_Cache,轻量级是模糊的东西。我想所有其他要求都是匹配的。