防止过多的数据库连接

时间:2011-06-03 17:44:43

标签: php

我的数据库连接的包含文件包含以下代码:

$my_db_link = mysql_connect('my_host', 'my_username', 'my_password');
if (!$my_db_link) {
    die('Could not connect: ' . mysql_error());
}

$my_db_name = 'my_database';
mysql_select_db($my_db_name);

如果我使用include_once()而不是include()或require_once()而不是require(),它会有所作为吗?我们最近有一个“太多连接”错误(“PHP警告:mysql_connect()[function.mysql-connect]:连接太多”)我想知道是否使用include()创建了多于必要的连接。

include_once('my_db_connect.php');

而不是

include('my_db_connect.php');

4 个答案:

答案 0 :(得分:1)

  

require()函数与   include(),除了它处理   错误不同。如果有错误   发生了include()函数   生成警告,但脚本   将继续执行。要求()   产生致命错误,并且   脚本将停止。

require_once手册为here

  

require_once()语句是   除了PHP之外,与require()相同   检查文件是否已经存在   包括,如果是,不包括   (要求)再次。

使用持久连接可能需要对Apache和MySQL配置进行一些调整,以确保不超过MySQL允许的连接数。

因此,最好使用mysql_pconnect()来防止连接过载。查看手册here

答案 1 :(得分:1)

  

如果我使用include_once()而不是include()或require_once()而不是require(),它会有所作为吗?

在这种情况下,没有。但是,在性能较高的应用程序中,请注意在某些系统上使用include_once / require_once。每次在代码中使用* _once()函数时,PHP都会使用stat()调用来确定它是否已包含该文件。 如果你小心你的设计,你将完全避免双重包括;大多数高级PHP开发人员通过使用面向对象编程与类文件的即时自动加载相结合来避免它。

编辑:http://www.techyouruniverse.com/software/php-performance-tip-require-versus-require_once

为无聊而咀嚼的东西。 :)

答案 2 :(得分:0)

如果您使用的是mod_php,请考虑使用mysql_pconnect()进行连接池。有关连接持久性的更多信息:

http://www.php.net/manual/en/features.persistent-connections.php

答案 3 :(得分:0)

使用include_once而不是include只会避免在同一运行时中包含同一文件。除此之外,如果有一个具有相同凭据的连接,mysql_connect已经使用现有连接。

但您可以尝试使用mysql_pconnect进行持久连接:

  

mysql_pconnect()mysql_connect()非常相似,但有两个主要区别。

     

首先,在连接时,该函数将首先尝试查找已使用相同主机,用户名和密码打开的(持久)链接。如果找到一个,将返回一个标识符,而不是打开一个新连接。

     

其次,当脚本的执行结束时,不会关闭与SQL服务器的连接。相反,该链接将保持打开状态以供将来使用(mysql_close()不会关闭由mysql_pconnect()建立的链接。)