2010-07-17 85 views
3

我正在设计一个Web应用程序(真的,这是一种爱好,我试图教自己设计,还有比做它更好的方法:)。无论如何,我正在考虑如何处理我的数据库。我对PDO感到满意,我正在考虑在抽象类中利用PDO。我正在考虑做一个单身人士,所以只有一个数据库连接。这个单例会创建一个PDO连接。使用PHP PDO的数据库抽象类设计

之后,我不明白为什么我需要做太多的事情。然后,我可以使用数据库处理程序来调用PDO函数。我可能需要一些辅助函数,但是当它接近它时,我只会使用PDO来处理实际的SQL查询。

这种方法有什么问题吗?与我使用的抽象类相比,它看起来过于简单。

+2

数据库抽象是一个荒谬的神话。 ORM是另一个故事,至少不是邪恶而是真实的。 – 2010-07-17 15:43:42

+0

你不需要Singleton – Gordon 2010-07-17 15:48:16

+0

@Gordon,你能详细说明为什么我不需要单身人士吗?我一直听说你需要单身人士来确保没有同时写入和类似的东西。 – Tim 2010-07-17 19:58:55

回答

5

你不需要单身人士。

数据库Singleton不会解决任何并发问题。如果有的话,它可以确保您在中创建的请求只有一个PDO实例。它提供全球接入,许多人认为这是一件坏事。另外还有you have to make some extra effort when testing the Singleton

只需在您的引导程序中需要create a wrapper that lazy connects and stores the instance并将实例设置为您的DALsupertype,例如TableDataGateway。而且,这样,您不会仅限于一个PDO实例,以免某些时候需要第二个PDO实例。

3

也许你觉得这很简单,因为PDO本质上是一个数据库抽象类。这意味着:工作已经完成。

+0

的确,这就是我提出这个问题的原因。有那么多的数据库抽象类和whizbangs在那里,它只是好像我错过了一些东西......很高兴知道我并没有完全离开我的摇杆。 – Tim 2010-07-17 15:33:45

1

是的,这是一个好的开始。 PDO +单身人士是一个经常使用和很好的组合。由于我个人不喜欢所有打字涉及比使用单身,我写了a very lightweight database class

它引入了只有两个附加功能在PDO:使用__callStaticDB::query()而不是DB::instance()->query()),并且可以轻松两个函数引用(DB::q('INSERT INTO table (name) VALUES (?s)', $_POST['insecure_name']))(懒惰)PDO实例的访问。也许你想看看两者,这真的很方便;)

1

您可能也有兴趣在项目php-pdo-wrapper-class。这是一个轻量级的数据库类,它扩展了PDO,添加了几个方法 - 插入,更新,删除,选择(以及其他一些) - 以简化常用的SQL语句。我在我的开发中使用了这个项目,并强烈建议。