0

我已经将我的测试服务器和新的生产服务器从 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): 每个套接字地址(协议/网络地址/端口)通常只允许使用一次

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

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

我基本上在做的是:

While 循环查询结果

{

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

查询执行($查询);

}

我认为问题在于我正在执行许多插入的事实;大约 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);
}
4

1 回答 1

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();
于 2013-01-29T18:15:19.790 回答