2011-08-16 44 views
2

我正在研究一个中等规模(可能)PHP系统,该系统的MySQL连接在不同文件中的任意位置打开,并作为全局变量供后来包含的脚本访问。由于我创建了另一个模块,我想避免使用全局变量,并为每个页面请求保留相同的mysql连接。我目前的解决方案是这样的:将mysql连接设置为静态是一个好主意吗?

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

对于每个请求,连接将被保存在静态数组中,并在稍后时间返回。你认为会出现什么问题?为什么?

想听听你对如何最好地解决一些这方面的意见,我希望减少每个脚本运行打开的连接数(目前,一个页面请求调用约6-15 MySQL连接到至少3个不同的数据库) 。

+1

如果你创建一个类来处理你所有的数据库交互,那么你将不必担心这个 – Ibu

+1

为什么你有超过1个连接到单个数据库? – prodigitalson

+0

@prodigitalson:我还没有深入研究这个过程,但我怀疑全局连接会在脚本运行中重新初始化。当我剖析代码时,我发现mysql_connect()被多次调用,涉及包括另一个.php文件的某些函数调用,等等...... – fred

回答

0

不需要重新发明轮子。你可以使用mysql持久连接来保持连接的活跃。 (http://php.net/manual/en/function.mysql-pconnect.php)

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

此外,如果您的数据库位于同一主机上,则应该可以使用mysql_select_db()函数使用相同的mysql连接。

+0

OTOH,持久连接在MySQL中是不鼓励的,因为连接过程非常便宜 - 一方面 - 它可以引发一个或其他问题,例如被遗忘的表锁等。 – glglgl

+0

使用持久连接需要重写整个mysql我们目前正在使用的类库。它与所有数据库操作紧密结合,因此开发人员无法在未经HOD批准的情况下触摸它。我能做的最好的是编写一些包装类来缓解当前的问题。 – fred

相关问题