Frage

Im Code für MySQL-Verbindung mit

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

Im einschließlich dieser Datei auf der Spitze jede PHP-Datei, die für die Analyse im mit und dann die Daten in database.Now zu speichern, wenn die Original-Website wird nach unten, dann meinen Parsing-Dateien beginnen Fehler zu geben „Warning: mysql_connect (): Zu viele Verbindungen in /home/clickindia/public_html/appuonline/db.php on line 2 Kann keine Verbindung aufbauen: "

Was soll ich tun, um meine Seite speichern von diesen errors.Do Sie denken, dass ich mysql_close ($ con) verwendet werden soll; Aber wie und wo ??? Im mit Chip in meinem Code ist das richtig oder soll ich verwenden schließen usw. plz help !!

War es hilfreich?

Lösung

Sie sagen, Sie diese Verbindung Code setzen „auf der Oberseite jeder PHP-Datei“.

Meine Frage ist: Haben Sie mehrere dieser Dateien für eine einzelne Seite verwenden

?

Wenn dies der Fall ist, dann sollten Sie die Verbindung öffnen, nur einmal für eine Seite. Dies könnte die Erklärung des Fehlers sein.

Artem rät sind auch relevant.

Andere Tipps

Das ist wirklich ein Sysadmin Problem - sollten Sie Ihren Systemmanager in Verbindung. Wenn Sie Web-Hosts und dedizierte Datenbank-Host gewidmet haben, dass Sie die Konfiguration verwalten von, gibt es zwei offensichtliche Lösungen für diese:

  1. Erhöhen Sie max_connections
  2. Neukonfigurieren Anwendung weniger verbrauchen

Web-Server, die auf jeder Seite verbinden kann viel verwendet werden.

Sie können einen Singleton Umwickeln Zugriff auf die Datenbank zu betrachten. Vorteile:

  • Sie können nur eine Verbindung verwenden.
  • Sie öffnen nur eine Verbindung, wenn Sie es brauchen (und nicht willkürlich auf jeder Seite verbinden).

Sie können Ihre eigenen Singleton rollen oder ein von einem Rahmen bekommen, dachte, dass vielleicht zu viel des Guten, je nachdem, was Sie gerade arbeiten. Die Grundlagen etwas so sein würde:

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

}

Wenn ich diesen Weg zu gehen, würde ich wahrscheinlich das tun, indem Zugriff auf eine Instanz von mysqli Steuerung und direkt verwenden, anstatt wickelt die mysql_ * Funktionen. Sie können mehr über die Singletonmuster auf Wikipedia erfahren.

Ihre Anwendung würde dann mit der Klasse wie folgt funktionieren:

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

Ich hoffe, das hilft!

  1. Sie nicht Anzeigefehler die Öffentlichkeit, vor allem auf die Produktion.

  2. Verwenden Sie Ausnahmen statt die.

  3. Behandeln Sie Ihre Ausfälle elegant - diese Art von Hand in Hand geht mit # 1. Nicht nur sterben -. Umleitung auf eine Fehlerseite oder zeigt einen temporären „könnte keine Daten speichern“ -Nachricht

  4. Einrichten von MySQL-Slaves und Abfrage diejenigen wenn Sie können. Die Replikation wird Ihnen helfen, immer mit Stabilität und Single Points of Failure (bis zu einem gewissen Grad).

mysql eine Begrenzung der Anzahl der Verbindungen ist, die es zu Client (php-Client-Bibliothek in diesem Fall) geben kann.

mysql_connect () eröffnet neue Verbindung (en) und schließt nicht die älteren. Sie können mysql_pconnect verwenden, dieses Problem zu lösen. einen Blick @ dieser Funktion Dokumentation Nehmen von mysql pconnect

Sie können auch mysql_pconnect verwenden:

Baut eine persistente Verbindung zum MySQL-Server.

mysql_pconnect () verhält sich sehr ähnlich wie mysql_connect () mit zwei wesentliche Unterschiede.

  • Es wird versuchen, einen offenen wiederzuverwenden Verbindung, die die gleiche ist.

  • Es wird die Verbindung nicht schließen an das Ende des Skripts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top