25

到目前为止,在任何我们可以善意重用的开源项目下开发的最好的 PHP DAL(数据抽象层)是什么?

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

  1. 广泛测试,
  2. 具有良好的接口(可读的方法名称,良好的参数传递策略),
  3. 快速地,
  4. 轻的,
  5. 提供缓存(例如与 Memcache 集成或支持良好的缓存机制),
  6. 开源许可证,
  7. 至少应该有 MySQL/MySQLi 的适配器(基于非 PDO)

一些需要考虑的库:

请不要考虑:

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

7 回答 7

12

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

更新:如果 Doctrine 不好,你可以试试MDB2。它拥有适用于大多数流行 RDBMS 的驱动程序、强大的 API、出色的文档和庞大的用户群:

  • MySQL
  • MySQLi(仅限 PHP5)
  • PostgreSQL
  • 甲骨文
  • 前线基地
  • Interbase/Firebird(仅限 PHP5)
  • 微软SQL
  • SQLite
于 2011-10-22T08:45:29.253 回答
3

在过去的 1 年里,我一直在为我的 Web 应用程序使用 Zend_Db。我认为,Zend 框架是迄今为止最好的。

Zend 是由 PHP 的核心贡献者创建的。(1)

广泛测试

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

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

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

速度

是的。Zend_Db 默认使用 PDO。

轻的

是的

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

Zend 有一个广泛的缓存系统

开源许可证

是的

要访问数据库表,您所要做的就是通过将表名及其主键设置为其字段来为其创建一个类。

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

更多参考这里。检查此关系问题以获取更多信息

于 2011-10-22T11:06:53.727 回答
2

我对Propel有很好的经验。教义是相似的,我听说过它的好东西,但我没有经验。

于 2011-10-18T13:22:27.507 回答
2

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

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

于 2013-12-21T14:45:35.273 回答
2

我在教条 DBAL 上遇到了一些问题,主要是创建模式/数据库/表,它有问题,并且一些文档与实际的接口和类方法不同(我确实阅读了正确的版本文档),我不得不使用原始 sql 语句其中一些东西。
其他一切似乎都很好,这是一个小项目,所以我没有使用 DBAL 提供的所有特性。

注意:大约一年前,我使用最新的稳定版本的学说 DBAL 和 php 完成了这项工作,也许现在所有这些问题都已解决。

于 2011-10-25T11:17:39.483 回答
2

Doctrine 2.0 是市场上最好的,因为它得到了 Zend 框架、Symfony 等顶级框架的支持。

它还支持 nosql db,如 mangodb 等...

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

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

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

                               | 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 结果的关键观察结果。

查看最后两条记录,教义 2.0 的性能如何提高...

于 2011-10-28T13:45:11.883 回答
1

Zend_Db呢?唯一需要 Zend_Cache 和轻量级缓存的东西是模糊的。我猜所有其他要求都匹配。

于 2011-10-22T10:07:05.343 回答