2010-11-18 4 views
2

Was ist der beste Weg, um von PHP aus zu überprüfen, ob die Verbindung zu einem MySQL Server erfolgreich ist? Ich habe einige Lösungen gesehen, die zuerst versuchen, eine Socket-Verbindung (mit fsockopen) zu öffnen und eine Verbindung zu MySQL herzustellen (über die von Ihnen verwendete Erweiterung), nur wenn die Socket-Verbindung erfolgreich war. Ich bin mir da nicht so sicher, da man jedes Mal zwei Verbindungen herstellen muss, ob das den Server zu sehr belastet.Prüfen, ob der MySQL-Server Verbindungen akzeptieren kann

Mein Problem ist, dass, wenn mein MySQL-Server stürzt oder aus irgendeinem Grund nicht mehr funktioniert, die Webseite nicht mehr funktioniert (sie lädt lange und kommt dann normalerweise mit einem 504-Gateway-Timeout-Fehler zurück). Ich möchte eine benutzerfreundliche Fehlermeldung anzeigen, wenn MySQL nicht verfügbar ist. Dies würde hoffentlich auch verhindern, dass MySQL noch mehr Schaden nimmt, wenn es bereits kämpft, da neue Clients erst dann eine Verbindung herstellen, wenn der Server wieder verfügbar ist.

Ich verwende MySQLi Erweiterung, wenn das relevant ist.

+0

sollte kein mySQL Verbindungsversuch Zeit relativ schnell aus, wenn Fehler? –

+0

hängt von connect_timeout Einstellung – ajreal

Antwort

2

Was Sie brauchen, ist die MYSQLI_OPT_CONNECT_TIMEOUT in mysqli angeben :: Optionen details

+0

+1 das klingt wie das Richtige zu zwicken. –

+0

Ok, das hilft, dass die Auszeit früher eintritt. Aber ich bin immer noch besorgt, dass eine MySQLi-Verbindung für den MySQL-Server teurer ist als eine 'fsockopen'-Prüfung. Irgendwelche Gedanken? –

+0

Mit dem fsockopen, IMHO - Zwei ist größer als eins. – ajreal

0
<?php 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

/* 
* This is the "official" OO way to do it, 
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. 
*/ 
if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

/* 
* Use this instead of $connect_error if you need to ensure 
* compatibility with PHP versions prior to 5.2.9 and 5.3.0. 
*/ 
if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

echo 'Success... ' . $mysqli->host_info . "\n"; 

$mysqli->close(); 
?> 

Von http://www.php.net/manual/en/mysqli.connect.php

+0

Dies wird mir einen Fehler geben, nachdem die MySqli-Erweiterung auf Gott weiß, wie lange Sie versuchen, eine Verbindung herzustellen. Ich muss wissen, ob ich in der Lage sein werde, mich zu verbinden, bevor ich eine neue MySqli ... mache –

Verwandte Themen