2014-10-05 14 views
6

bekommen dies in meinem Fehler hin anmeldet und dann und wollen das Problem herauszufinden:SQLSTATE [HY000] [2002] Connection timed out

[04-Oct-2014 13:25:42 America/Chicago] Failed to connect to database: SQLSTATE[HY000] [2002] Connection timed out [04-Oct-2014 13:25:42 America/Chicago] PHP Fatal error: Call to a member function prepare() on a non-object in /home/spconlin/public_html/spc_app/app/add_log.php on line 28

Connect Skript:

<?php 

if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly'); 

// db config 
$db_host  = '127.0.0.1'; 
$db_database = '*****'; 
$db_user  = '*****'; 
$db_pass  = '*****'; 

//db connection 
try { 
    $db = new PDO("mysql:host=$db_host;dbname=$db_database;charset=utf8", $db_user, $db_pass, 
     array(
      PDO::ATTR_EMULATE_PREPARES => false, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //PDO::ERRMODE_SILENT is default setting 
      PDO::ATTR_PERSISTENT => false 
      ) 
    ); 
} 
catch(PDOException $e) { 
    error_log("Failed to connect to database: ".$e->getMessage()); 
} 

?> 

Was ich getan habe:

  • wechseln von 'lo calhost‘to 127.0.0.1 in den Anschluss
  • Schalter persistenten Verbindungen zu falschen

Bevor die oben genannten Änderungen an meine Verbindung zu tun war ich immer SQLSTATE[HY000] [2002] Resource temporarily unavailable statt connection timed out wie oben gezeigt.

Einige Hintergrundinformationen - insbesondere das Skript add_log.php fügt der Datenbank einige Informationen hinzu, wenn sie tatsächlich verwendet wird. Während fast 99% der Zeit dieses bestimmte Skript in dem Fehler referenziert wird, sind manchmal andere. Ich weiß, dass das Skript auf nichts wirklich hindeutet, weil dies nicht der Fehler ist (es tritt in der Verbindung nicht das Skript add_log.php auf), aber es ist seltsam, dass es fast immer diese bestimmte referenzierte Datei ist, die mich führt Die Tatsache, dass es so oft hintereinander heißt, zu glauben, ist Teil des Problems.

DB ist innodb.

Ist das tatsächlich ein Problem mit meinem Server und db oder der Person/Computer, der damit verbunden ist? Ist es möglich, dass "sie" eine schlechte Verbindung zu "mir" haben und dies den Fehler verursacht?

EDIT:

Könnte es in der Art und Weise sein, die ich meine connect Skript bin erfordert auf Seiten ist sie nötig? Da die Datei ziemlich oft "getroffen" wird, würde mein Connectscript genauso viel von der darunter liegenden Zeile benötigt. Beachten Sie, dass ich $_SERVER['DOCUMENT_ROOT'] verwende (könnte das Auswirkungen haben?).

+0

Können Sie sich mit einem Client in Ihre Datenbank einloggen? ohne PHP? Normalerweise ist dies ein mysql-Ressourcenproblem –

+0

welche Zeile des Codes ist in add_log.php Zeile 28? Es scheint nicht Teil des Codes zu sein, den Sie enthalten haben. – mschuett

+0

Es ist nicht relevant, wie in der Op erwähnt. Der Fehler tritt in der Verbindung auf und wird bei der nächsten Verwendung von $ db ausgelöst.Es gibt keinen "Fehler" mit den Skripten - sie funktionieren gut - ich kann diesen Fehler nicht selbst replizieren und es passiert nicht die ganze Zeit. – user756659

Antwort

1

Dinge, die Sie in Ihrem Code verbessern sollten, ist die Verbindung zu überprüfen, bevor Sie eine neue erstellen.

Sie sollten es schaffen, die Verbindung so oft wie möglich wiederzuverwenden, anstatt unnötige neu zu erstellen.

Wenn zu viele Verbindungen geöffnet sind, treten Fehler wie diese auf und es ist nicht so offensichtlich, sie zu reproduzieren.

Auch wenn die Verbindung nicht erfolgreich ist, sollten Sie vor der Vorbereitung beenden.

Diese Änderungen erfordern möglicherweise, dass Sie diese Logik innerhalb einer Klasse implementieren.

+0

Können Sie das erweitern? Ich benutze PDO. Ursprünglich hatte ich persistente Verbindungen eingeschaltet ... Ich habe das jetzt ausgeschaltet. Zweitens, mit PDO wird die Verbindung automatisch geschlossen, wenn das Skript endet. Die einzigen geöffneten Verbindungen sind solche, die geöffnet sein sollten. – user756659

+0

wenn etwas 'ATTR_PERSISTENT' sollte auf True gesetzt werden – meda

+0

Was war das, was ich ursprünglich hatte - als dies war ich immer noch die gleichen Fehler, aber sie waren "SQLSTATE [HY000] [2002] Ressource vorübergehend nicht verfügbar" – user756659

Verwandte Themen