在进行批量插入时,MYSQL会丢失连接

时间:2013-01-29 18:13:11

标签: php mysql mysqli

我已将我的测试服务器和新生产服务器从php 5.2升级到5.4.7。 另外在PHP代码中,我用新的方式替换了连接到mysql数据库的旧方法(因此我使用mysqli_connect()方法代替mysql_connect()。这是因为从旧版本的4.5版本开始,旧方法将被弃用。 / p>

Everythings似乎运行良好且经过了充分测试 - 我想,但我刚刚发现,在进行mysql连接挂起的批量单独插入查询时。这在测试服务器上作为生产服务器(Centos Linux)发生。因此,PHP确实可以很好地建立连接,只有在进行批量插入时才会使连接丢失一半左右。

测试服务器(Windows XP,使用XAMPP)给出错误消息:

  

mysqli_connect():( HY000 / 2002):每个套接字地址只有一种用法   (协议/网络地址/端口)通常是允许的

在linux机器上,我收到错误消息:

  

mysqli_connect():( HY000 / 2003):无法连接到MySQL服务器   '127.0.0.1'(99)

我基本上做的是:

  

While循环查询结果

     

{

     

$ query =“插入(a,b,c,d)值(1,2,3,4)”;

     

query_execute($查询);

     

}

我认为问题在于我正在执行许多插入;大约100,000个单独的插入。我没有使用持久的mysql连接。

我对导致这种情况的原因一无所知(mysql,PHP,服务器本身)?

加入: 运行/执行查询的代码(简化)类似于:

  

//数据库连接类

     

类数据库($ query)

     

{

     

public function setup_connection(){$ this-> link = mysqli_connect('localhost','my_user','my_password','my_db');}

     

public function execute_query($ query){mysqli_query($ this-> link,$ query);}

     

}

     

//使用类

的常规php页面      

$ obj_db1 =新数据库($ query);

     

而($ obj_db1->环())

     

{

     

$ obj_db_insert = new database($ query);

     

}

帮助表示赞赏!

帕特里克

1 个答案:

答案 0 :(得分:2)

确保在插入代码中每次都不打开与数据库的新连接。

<强>更新 我的猜测是正确的,并且基于您刚发布的代码,

让你的课程如下:

class database

{

public function setup_connection() {...}

public function execute_query($query){...}

public function close_connection(){...}
}

然后在通话中如下所示:

$db = new database();
$db->setup_connection();

//execute your queries as much as you want ...
//loop start
$db->execute_query($query);
//loop end 

// close connection 
$db->close_connection();

我希望这会有所帮助。