2014-06-18 58 views
0

我有以下代码“无法连接。连接太多”错误的MySQLi

function openDBConn($params){ 
    $conn_mode = $params['conn_mode']; 
    $db_conn = $params['db_conn']; 

    //create connections 
    if(empty($db_conn->info)) { 
     $db_conn = new mysqli("localhost", $user, $password, "database"); 
     $db_conn->set_charset('UTF8'); 
     $mysqli_error = $db_conn->connect_error; 
    } 

    if($mysqli_error !== NULL){ 
     die('Could not connect <br/>'. $mysqli_error); 
    }else{ 
     return $db_conn; 
    } 
} 

//close db connection 
function closeDBConn($params){ 
    $db_conn = $params['db_conn']; 
    $db_conn->close; 
} 

//used as below 
$db_conn = openDBConn(); 

save_new_post($post_txt, $db_conn); 

closeDBConn(array('db_conn'=>$db_conn)); 

不时,我得到“无法连接。太多的连接”的错误。 当我使用Google Bot扫描我的网站时,这往往会发生。

从MySQL升级到MySQLi后,这个问题似乎就开始了。 有没有关于如何确保所有连接都关闭的建议?

感谢

+0

除非您已明确请求持久连接,否则PHP将在脚本退出时自动关闭连接。这意味着你的网站可能只有很多同时点击,并且你的连接限制太低/不符合你允许的许多apache子进程。 –

+0

在您的数据库控制台中运行'SHOW VARIABLES LIKE'%connect%''查看最大连接数。 – cerd

+3

'$ db_conn-> close;'什么都不做。你需要'()'。 –

回答

0

一些托管有一个硬性限制你有多少开放数据库连接允许有。也许你想联系你的主机,知道你可以打开多少人。对于流量负载较高的网站,更多连接可能会有所帮助。

2

你需要增加连接数你的MySQL服务器(默认是只有100一般为每个页面负载消耗一个连接)

编辑/etc/my.cnf

的max_connections = 250

然后重启MySQL

服务mysqld的重新启动

http://major.io/2007/01/24/increase-mysql-connection-limit/

+0

连接数量是多少? –

+0

我建议250到500之间的正常负载的普通Web服务器。除此之外,您可能希望将您的数据库服务器从Web服务器中分离出来。 – Machavity

0

你有访问服务器直接或者是一个托管解决方案?

如果您有直接访问权限,您可以检查mySQL配置文件以查看允许多少个连接并增加它。

如果您不这么做,您可能需要联系您的网站主机关于增加限制并查看他们是否符合要求。

+0

它是一个具有中介功能的共享服务器 –