What is the best PHP DAL (data abstraction layer) so far developed under any open source project which we could re-use with good faith?
I am finding it hard to choose a DAL for my application that sufficiently supports abstraction to most common databases systems (MySQL, PostgreSQL, MSSQL, Oracle, etc) and is:
- widely tested,
- has good interface (readable method names, good parameter passing strategy),
- fast,
- lightweight,
- providing cache (e.g integrates with Memcache or supports a good caching mechanism),
- open-source license,
- should have adapters for at least MySQL/MySQLi (non-PDO based)
Some of the libararies to consider:
- PHPBB DAL http://wiki.phpbb.com/Database_Abstraction_Layer
- Joomla DAL http://api.joomla.org/Joomla-Framework/Database/JDatabase.html
- ADOdb http://phplens.com/adodb/
- Zend_db
- Doctrine (downside only supports PDO_*)
- any other DAL used/developed under any open-source project/branch
Please don't consider:
- PDO
- All ORMs (however, Doctrine seems to have a separate DAL besides ORM)
If you can do with PHP 5.3, I would highly recommend Doctrine DAL, it's built on top of PDO, so you get the same performance plus a great API.
Update: If Doctrine is not good, you can try MDB2. It has drivers for most of the popular RDBMS, a robust API, great docs and a huge user base:
I had some trouble with doctrine DBAL, mostly with the schema/database/table creation, it was buggy and some of documentation was different from actual interfaces and class methods(I did read right version documentation), I had to use raw sql statements for some of those things.
Everything else seemed to be fine, it was small project so I did not use all the features doctrine DBAL provides.
Note: I did it around a year ago with latest stable version of doctrine DBAL and php, maybe all those problems are fixed by now.
Doctrine 2.0 is the best one in the market because it is supported by topmost frameworks like Zend framework, Symfony.
It also supports nosql db like mangodb etc...
It has inbuilt cache system which can boost the application.
It is also having Extension support like pagination, query builder etc
Here are some of the bechmarks results of propel and doctrine
These are the key observations for the Doctrine 2 results.
see the last two records how the performance has increased with doctrine 2.0...
If you only need to work with MySQL, DALMP Database Abstraction Layer for MySQL using PHP. can be an option
works with cache/memcache/redis and also does session handling very simple and light.
I have been using Zend_Db for my web application for the past 1 year. I think, Zend Framework is the best by far.
Zend was started by folks who were the core contributors of PHP.(1)
Yes. It is used by thousands of projects and has a active community of developers.
Yes. All Components can be easily customized to your needs. Every component in Zend is loosely coupled, meaning you can use any component without any dependency on any other component in the framework.
Yes. Zend_Db using PDO, by default.
Yes
Zend has an extensive caching system.
Yes
To access a DB table, all you have to do, is create a class for it by setting the table name and its primary key as its fields.
This is called a model. In this class, you can create all the methods related to 'User' entity like adding a new user, editing user etc.
In your application code, you can use this as,
Must Read this - http://framework.zend.com/manual/en/zend.db.table.html
More reference here. Check this relation question for more information
I have good experience with Propel. Doctrine is similar, I heard good things about it but I don't have experience.