迄今为止在任何开源项目下开发的最佳PHP DAL(数据抽象层)是什么?我们可以善意地重复使用它们?
我发现很难为我的应用程序选择一个DAL,它足以支持对大多数常见数据库系统(MySQL,PostgreSQL,MSSQL,Oracle等)的抽象,并且是:
要考虑的一些图书馆:
请不要考虑:
答案 0 :(得分:11)
如果您可以使用PHP 5.3,我强烈推荐Doctrine DAL,它建立在PDO之上,因此您可以获得相同的性能和优秀的API。
更新:如果学说不好,您可以尝试MDB2。它具有大多数流行的RDBMS的驱动程序,强大的API,出色的文档和庞大的用户群:
答案 1 :(得分:3)
过去1年我一直在使用Zend_Db作为我的网络应用程序。我认为,Zend Framework是迄今为止最好的。
Zend是由PHP的核心贡献者开始的。(1)
经过广泛测试
是。它被成千上万的项目使用,并且拥有一个活跃的开发者社区。 p>
具有良好的界面(可读的方法名称,好 参数传递策略)
是。所有组件均可根据您的需求轻松定制。 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)
答案 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,轻量级是模糊的东西。我想所有其他要求都是匹配的。