5

我正在设计一个 Web 应用程序(真的,这是一种爱好,我正在尝试自学设计,还有什么比这样做更好的方法 :)。无论如何,我正在考虑如何处理我的数据库。我对PDO很满意,并且我正在考虑在我的抽象类中利用 PDO。我正在考虑制作一个单例,以便只有一个数据库连接。这个单例将创建一个 PDO 连接。

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

这种方法有问题吗?与我使用的抽象类相比,它似乎过于简单。

4

4 回答 4

5

你不需要单例。

数据库 Singleton 不会解决任何并发问题。如果有的话,它可以确保您只有一个 PDO 实例用于创建它的请求。它提供了全球访问,许多人认为这是一件坏事。此外,在测试 Singleton 时,您必须付出一些额外的努力

只需创建一个包装器,在需要时在引导程序中延迟连接和存储实例,并将实例设置为DAL 超类型,例如TableDataGateway。此外,这样您就不会将自己限制为只有一个 PDO 实例,以防您在某个时候需要第二个实例。

于 2010-07-18T08:46:11.030 回答
3

也许对您来说似乎很简单,因为 PDO 本质上是一个数据库抽象类。这意味着:工作已经完成。

于 2010-07-17T15:29:18.583 回答
2

是的,这是一个好的开始。PDO + singleton 是一种常用且很棒的组合。由于我个人不喜欢使用单例所涉及的所有类型,因此我编写了一个非常轻量级的数据库类

__callStatic它仅在 PDO 上引入了两个附加功能:使用(DB::query()而不是)访问(惰性)PDO 实例DB::instance()->query()和两个更容易引用的函数(DB::q('INSERT INTO table (name) VALUES (?s)', $_POST['insecure_name']))。也许你想看看两者,它真的很方便;)

于 2010-07-17T15:43:21.967 回答
1

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

于 2010-11-29T01:11:37.890 回答