【问题标题】:Is it a good idea to make mysql connections static?将mysql连接设为静态是个好主意吗?
【发布时间】:2011-10-27 18:22:43
【问题描述】:

我正在开发一个中型(可能)PHP 系统,该系统在不同文件中随处打开 MySQL 连接,并将其制成全局变量以供以后包含的脚本访问。由于我正在创建另一个模块,因此我想避免使用全局变量并为每个页面请求保持相同的 mysql 连接。我目前的解决方案是这样的:

Class Db {
        static public $dbConnectionArray = array();
}

对于每个请求,连接都将保存在静态数组中,并在以后引用。你认为会出什么问题?为什么?

想听听一些关于如何最好地解决这个问题的意见,因为我很想减少每次脚本运行时打开的连接数(目前,一个页面请求调用了大约 6-15 个 mysql 连接到至少 3 个不同的数据库)。

【问题讨论】:

  • 如果你创建一个类来处理你所有的数据库交互,那么你就不必担心这个
  • 为什么一个数据库有多个连接?
  • @prodigitalson:我没有深入研究这个过程,但我怀疑全局连接在脚本运行的中途被重新初始化。当我分析代码时,我发现 mysql_connect() 被多次调用某些函数调用,其中包括一个包含另一个的 .php 文件,依此类推......
  • 嗯...自从我在生产中使用 mysql 扩展程序以来已经 很长时间了(我现在只使用 PDO),但我认为它是“智能的”如果签名匹配,则抓取已经打开的连接。
  • @prodigitalson:是的,默认情况下是这样,但我们的代码指定了 new_link 标志以便每次都建立新的连接。

标签: php mysql static-variables


【解决方案1】:

无需重新发明轮子。您可以使用 mysql 持久连接来保持连接处于活动状态。 (http://php.net/manual/en/function.mysql-pconnect.php)

通过使用持久连接,您的 PHP 脚本将重用相同的数据库连接(只要数据库名称和凭据相同)

另外,如果您的数据库在同一主机上,您应该能够通过使用mysql_select_db() 函数来使用相同的mysql 连接。

【讨论】:

  • OTOH,在 MySQL 中不鼓励使用持久连接,因为连接过程非常便宜 - 一方面 - 它可能会导致一个或另一个问题,例如忘记表锁等。
  • 使用持久连接需要重写我们当前使用的整个 mysql 类库。它与所有数据库操作紧密耦合,因此未经 HOD 批准,开发人员不能接触它。我能做的最好的就是编写一些包装类来缓解当前的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多