0

mysql接続にこのコードを使用しています

$con = mysql_connect("localhost:/var/lib/mysql/mysql.sock", "abc" , "xyz");
if (!$con)
{
    die('Could not connect: ');
}
mysql_select_db("database_name", $con);

解析に使用してデータベースにデータを保存するすべてのphpファイルの先頭にこのファイルを含めます。元のサイトがダウンすると、解析ファイルがエラーを出し始めます「警告:mysql_connect():/の接続が多すぎますhome/clickindia/public_html/appuonline/db.php 行 2 に接続できませんでした:"

サイトをこれらのエラーから救うにはどうすればよいですか。mysql_close($con); を使用する必要があると思いますか? しかし、どのように、どこで?私のコードでダイを使用しているのが正しいか、クローズなどを使用する必要があります.plz help!!

4

6 に答える 6

1

この接続コードを「すべてのphpファイルの先頭に」置くと言います。

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

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

アルテムのアドバイスも適切です。

于 2009-07-06T08:18:13.510 に答える
1

これは実際にはシステム管理者の問題です。システム管理者に連絡する必要があります。構成を管理する専用の Web ホストと専用のデータベース ホストがある場合、これには 2 つの明白な解決策があります。

  1. max_connections を増やす
  2. アプリケーションを再構成して消費量を減らす

すべてのページで接続する Web サーバーは、大量に使用できます。

于 2009-07-06T07:10:25.550 に答える
1

データベース アクセスをシングルトンでラップすることを検討することをお勧めします。利点:

  • 使用できる接続は 1 つだけです。
  • 必要な場合にのみ接続を開きます (すべてのページで任意に接続するのではなく)。

独自のシングルトンを作成するか、フレームワークからシングルトンを取得できますが、作業内容によってはやり過ぎかもしれません。基本は次のようなものになります。

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 );
     }

}

このルートをたどるとしたら、mysql_* 関数をラップするのではなく、mysqli のインスタンスへのアクセスを制御し、それを直接使用することでおそらくこれを行うでしょう。シングルトン パターンの詳細については、ウィキペディアを参照してください。

アプリケーションは、次のようにクラスで動作します。

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

それが役立つことを願っています!

于 2009-07-07T10:55:40.313 に答える
0

mysql は、クライアント (この場合は php クライアント ライブラリ) に提供できる接続数に制限があります。

mysql_connect() は新しい接続を開いていますが、古い接続を閉じていません。mysql_pconnect を使用してこの問題を解決できます。mysql pconnect のこの関数ドキュメント @ を見てください。

于 2009-07-06T07:42:13.193 に答える
0
  1. 特に本番環境では、エラーを公開しないでください。

  2. の代わりに例外を使用しますdie

  3. 失敗を優雅に処理する - この種のことは #1 と密接に関連しています。エラーページにリダイレクトするか、「データを保存できませんでした」という一時的なメッセージを表示してください。

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

于 2009-07-06T07:09:26.817 に答える
0

mysql_pconnect を使用することもできます。

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

mysql_pconnect() は mysql_connect() と非常によく似た動作をしますが、2 つの大きな違いがあります。

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

  • スクリプトの最後で接続を閉じません。

于 2009-07-07T11:00:13.130 に答える