0

テスト サーバーと新しい運用サーバーの両方を php 5.2 から 5.4.7 にアップグレードしました。さらに、PHP コードでは、mysql データベースに接続する古い方法を新しい方法に置き換えました (したがって、mysql_connect() の代わりに mysqli_connect() メソッドを使用します。これは、古い方法が PHP バージョン 4.5 以降で廃止されるためです。

すべてが正常に動作しているようで、十分にテストされていると思いましたが、個々の一括挿入クエリを実行すると、mysql 接続がハングすることがわかりました。これは、テスト サーバーと運用サーバー (Centos Linux) の両方で発生します。したがって、PHP は正常に接続を確立します。接続が途中で失われるのは、一括挿入を行う場合のみです。

テスト サーバー (Windows XP、XAMPP を使用) では、次のエラー メッセージが表示されます。

mysqli_connect():(HY000/2002): 通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の使用は 1 つだけ許可されます

Linux マシンで次のエラー メッセージが表示されます。

mysqli_connect():(HY000/2003): '127.0.0.1'(99) で MySQL サーバーに接続できません

私が基本的にやっていることは次のとおりです。

クエリ結果をWhileループする

{

$query="insert into (a,b,c,d)values(1,2,3,4)";

query_execute($クエリ);

}

問題は、私が多くのインサートを実行しているという事実にあると思います。約 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 に答える