2009-07-06 27 views
0

イム「接続できませんでしたライン2 に/home/clickindia/public_html/appuonline/db.phpであまりにも多くの接続を:::mysql_connect()を警告」mysqlの接続

を私は保存するために何をすべきその後、私の構文解析ファイルがエラーに を与えて起動しますmysql_close($ con)を使うべきだと思いますか?しかし、どうやって?私のコードでdieを使っているImは正しいですか、私はclose等を使うべきですか?plz help !!

答えて

1

あなたは、この接続コードを "すべてのPHPファイルの先頭に"置くと言います。

私の質問です:これらのファイルのいくつかを1ページに使用していますか?

この場合、ページに対して1回だけ接続を開く必要があります。これはエラーの説明である可能性があります。

アルテムのアドバイスも関係します。

0
  1. display errors特に製造上は公開されません。

  2. dieの代わりにexceptionsを使用してください。

  3. あなたの失敗を正常に処理します。この種の問題は、#1と引き合いに出ます。死ぬだけではなく、エラーページにリダイレクトするか、一時的な「データを保存できませんでした」というメッセージを表示してください。

  4. 可能であれば、MySQLスレーブを設定してクエリを実行します。レプリケーションは常に安定性と単一障害点(ある程度)を助けます。

+0

最初の3つはすべていいアイデアですが、実際にはOPの問題とは関係ありません。最後のものは一般的なケースでは良いアイデアではなく、大規模な配備の一部としてのみ注意深く検討する必要があります。 – MarkR

1

これは本当にシステム管理上の問題です。システム管理者に連絡する必要があります。

  1. 増やすmax_connectionsを
  2. 再設定、アプリケーションが少ない

Webサーバーを消費するために:あなたはの構成を管理Webホストと専用データベースのホストを捧げてきた場合は、これには2つの明確な解決策がありますすべてのページに接続することができます多くを使用します。

0

mysqlはクライアント(この場合はPHPクライアントライブラリ)に与えることができる接続の数に制限があります。

mysql_connect()は新しい接続をオープンしており、古い接続を閉じていません。 mysql_pconnectを使ってこの問題を解決することができます。 Take a look @ this function documentation of mysql pconnect

+0

mysql_pconnectを使用すると、接続が必要なくなったときでも、接続を掛けて問題を悪化させることはほとんどありません。 – MarkR

1

データベースアクセスの周りにシングルトンをラップすることを検討するとよいでしょう。特典:

  • 1つの接続しか使用できません。
  • 接続を開くのは必要な場合のみです(各ページに任意に接続するのではなく)。

自分のシングルトンを動かすことができますし、フレームワークから1つを得ることもできます。私はこのルートを下るとしたら、私はおそらくmysqliののインスタンスへのアクセスを制御することにより、これを行うと、それを直接使うのではなくmysql_ *関数をラップしたい

class DatabaseAccess { 
    private static $instance; 
    private $connection; 

    //declare the constructor private so we can only use it in this class 
    private function __construct($host, $user, $pass, $db) { 
     $this->connection = mysql_connect($host, $user, $pass); 
     mysql_select_db($db, $this->connection); 
    } 

    //provide access to a single instance 
    public static function instance() { 
     if (! isset(self::$instance)) { 
      self::$instance = new DatabaseAccess('host', 'user', 'pass', 'db'); 
     } 
     return self::$instance; 
    } 

    //functions to execute/query the db 
    public function query($query) { 
     return mysql_query($query, $this->connection); 
    } 

} 

:基本的にはこのようなものになるだろう。ウィキペディアでのシングルトンパターンの詳細を知ることができます。

あなたのアプリケーションは、このようなクラスでは動作します:助け

$dba = DatabaseAccess::instance(); 
$result = $dba->query('select * from pages'); 
mysql_fetch_assoc($result); 
//blah blah blah 

希望を!

0

または、mysql_pconnectを使用することができます。

は、MySQLサーバへの持続的な接続を確立します。

mysql_pconnect()はmysql_connect()と同じように2つの大きな違いがあります。

  • 開いている の接続を再利用しようとします。

  • スクリプトの最後の で接続を閉じることはありません。