2016-09-28 33 views
0

我目前正在編寫一個程序,允許用戶在前端輸入主機名,用戶名,數據庫和密碼。在後端我使用mysqli_connect。我注意到,如果用戶輸入了不正確的主機名或者不存在的主機,我不會收到錯誤,但程序停止運行,我必須重新啓動apache。我想避免這種情況,目前我很難編寫'localhost'作爲主機,但我不想那樣做。我在mysqli_connect的末尾使用了一個die聲明,但它仍然停滯不前。mysqli_connect和一個錯誤的主機名 - 奇怪的行爲

我的問題是:有沒有辦法將mysqls搜索主機限制爲10秒或者短時間?還是有一種好的方法來驗證或檢查主機是否存在之前,我使用mysqli_connect?

+0

你不應該(而且很可能不能)用'或者用'mysqli'構造die',因爲它總是返回一個對象。而是使用'if($ mysqli-> connect_error)' – Phil

+0

你可以使用['mysqli :: real_connect'](http://php.net/manual/mysqli.real-connect.php)來設置連接超時時間 – Phil

+0

在版本上應該有一個mysql「連接超時」變量 – nogad

回答

1

我想你可能正在尋找MYSQLI_OPT_CONNECT_TIMEOUT選項。

這裏方便地記載: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()); 
}