【发布时间】:2013-01-29 18:13:11
【问题描述】:
我已将我的测试服务器和新的生产服务器从 php 5.2 升级到 5.4.7。 此外,在 PHP 代码中,我将连接到 mysql 数据库的旧方式替换为新方式(因此,我使用 mysqli_connect() 方法代替 mysql_connect()。这是因为旧方式将从 PHP 4.5 版开始被弃用。
一切似乎都工作正常并且经过了很好的测试 - 我想,但我刚刚发现在执行批量单个插入查询时 mysql 连接挂起。这发生在作为生产服务器(Centos Linux)的测试服务器上。所以 PHP 确实可以很好地建立连接,只有在进行批量插入时,连接才会中途丢失。
测试服务器(Windows XP,使用 XAMPP)给出错误信息:
mysqli_connect():(HY000/2002): 每个socket地址只使用一次 (协议/网络地址/端口)通常是允许的
在 linux 机器上我收到错误消息:
mysqli_connect():(HY000/2003):无法连接到 MySQL 服务器 '127.0.0.1'(99)
我基本上在做的是:
While Loop 查询结果
{
$query="插入(a,b,c,d)值(1,2,3,4)";
query_execute($query);
}
我认为问题在于我正在执行许多插入的事实;大约 100.000 个单独的插件。我没有使用持久的 mysql 连接。
我不知道是什么原因造成的(mysql、PHP、服务器本身)?
添加: 运行/执行查询的代码(简化)类似于:
//the database connection class
class database($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);
}
}
//a regular php page using the class
$obj_db1=new database($query);
while($obj_db1->loop())
{
$obj_db_insert=new database($query);
}
【问题讨论】:
-
如果 query_execute 是一个自定义函数,您可以编辑您的问题以包含相应的代码吗?
-
当你知道会有批量插入时使用持久连接。
TIME_WAIT会影响 TCP 连接吗? -
我刚刚编辑了代码来解释连接数据库的方式。请记住,这种方法多年来一直有效,但突然不再有效,这似乎很奇怪。