gpt4 book ai didi

PHP PDO : Multiple objects extend dbwrapper; How many MySQL connections?

转载 作者:行者123 更新时间:2023-11-29 00:59:08 25 4
gpt4 key购买 nike

情况:

  • 我使用数据库类作为包装器 (dbwrapper) 通过 PHP PDO 打开和关闭数据库连接
  • 我有 3 个单独的类来扩展这个数据库包装器
  • 我从上述类中实例化了 3 个对象,在它们存在的过程中,它们每个都进行数据库查询
  • 本例中使用的是 MySQL。

当 3 个类的方法需要 db 访问时,它们各自在内部创建 PDO 对象,利用它们扩展的 dbwrapper。每个对象都将其 PDO 对象存储在一个成员/字段中,以供自身引用。

问题:我的问题是……每个对象是否都创建了一个单独的数据库连接,总共有 3 个? Apache 的每个客户端是只创建一个到数据库的连接,还是每个在 php 应用程序中使用数据库的对象都创建一个连接。 (听起来效率低下!)

原因:我想了解这些连接是如何处理的。

我正在尝试决定是让每个类都扩展 dbwrapper 会更好,还是在不自动连接 db 的情况下初始化 dbwrapper 会更好,在需要时处理它。相反,我会在每个对象初始化时将 dbwrapper 传递给它们的构造函数……让它们使用该引用。如果发生多个数据库连接,那么我认为这将是在克服对象范围和访问问题的同时最大限度地减少开销的最佳方法。

提前致谢!

最佳答案

is each object creating a separate connection to the database, making 3 in total?

也许吧。我不知道,但这是找出答案的方法。当您的脚本正在运行时,通过您选择的客户端(如命令行)连接到 MySQL 并发出命令 SHOW PROCESSLIST; 您将获得一个事件连接列表。

您可能需要在脚本中插入一个sleep,以使其保持足够长的时间,以便在实例化并处理所有三个对象时运行进程列表命令。

您会看到一个或三个连接。然后你就会得到答案。

(答案将因底层驱动程序而异。如果 DSN 相同,某些驱动程序将重用连接。)

Instead I would pass the dbwrapper to each objects constructor as they are initialized... letting them use that reference

这是常见的做法。数据库句柄是 Singleton 的主要候选对象模式也是如此。

关于PHP PDO : Multiple objects extend dbwrapper; How many MySQL connections?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com