2016-09-28 6 views
0

Ich schreibe gerade ein Programm, das es dem Benutzer erlaubt, den Hostnamen, den Benutzernamen, die Datenbank und das Passwort am Frontend einzugeben. Im Backend verwende ich mysqli_connect. Ich habe festgestellt, dass wenn der Benutzer einen falschen Hostnamen oder einen Host eingibt, der nicht existiert, bekomme ich keinen Fehler, aber das Programm bleibt stehen und ich muss Apache neu starten. Ich möchte das vermeiden, vorerst schreibe ich "localhost" als Host, aber das möchte ich nicht tun. Ich habe am Ende von mysqli_connect eine Die-Anweisung verwendet, die aber immer noch anhält.mysqli_connect und ein falscher Hostname - seltsames Verhalten

Meine Frage ist: Gibt es eine Möglichkeit, mysql Suche nach einem Host auf 10 Sekunden oder eine kurze Zeit zu begrenzen? Oder gibt es eine gute Möglichkeit zu validieren oder zu überprüfen, ob der Host existiert, bevor ich mysqli_connect verwende?

+0

Sie sollten nicht (und wahrscheinlich auch nicht) verwenden 'oder die' mit dem' mysqli' Konstruktor, wie es immer ein Objekt zurückgibt:

Günstig hier dokumentiert. Verwenden Sie stattdessen 'if ($ mysqli-> connect_error)' – Phil

+0

Sie können ['mysqli :: real_connect] (http://php.net/manual/mysqli.real-connect.php) verwenden, um das Verbindungs-Timeout – Phil

+0

abhängig zu setzen auf Versionen sollte es eine mysql "connect timeout" Variable geben – nogad

Antwort

1

Ich denke, Sie könnten nach der MYSQLI_OPT_CONNECT_TIMEOUT Option suchen. http://php.net/manual/en/mysqli.options.php

$mysqli = mysqli_init(); 
if (!$mysqli) { 
    die('mysqli_init failed'); 
} 
if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) { 
    die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed'); 
} 
if (!$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
     . mysqli_connect_error()); 
}