2017-03-08 55 views
1

嘿傢伙,我希望能夠運行查詢來建立我的數據庫,如果mysqli的返回「ER_BAD_DB_ERROR」/1049的錯誤不斷。這是我的代碼。如果錯誤被捕獲,我不希望mysqli顯示錯誤,而只是建立了數據庫。構建數據庫,如果mysqli的返回錯誤常量「ER_BAD_DB_ERROR」

發生什麼它是未知的數據庫錯誤是顯示,誤差是夾在if()語句和數據庫建立。

我認識的mysqli如果顯示因爲這樣的錯誤:

$connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 

如何生成數據庫的地方,如果我想要一個確切的錯誤被捕獲顯示錯誤的。

$db_server = "localhost"; 
$db_user = "user"; 
$db_pwd = ""; 
$dbname = "name"; 

#connect to database 
$connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 

#try to catch database not exist error 
if ('ER_BAD_DB_ERROR') { 
    # if true build database and connect again 
    build_db(); 
    $connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 
} else { 
    #close connection with other errors encounter 
    die("database connection failed". mysqli_connect_error()); 
} 

我不確定在這裏是否遵循最佳實踐。所以,我全心全意地接受建議和反饋。多謝你們。

+2

其中爲'build_db()'的代碼? – Fawzan

+0

也檢查這一點。 http://stackoverflow.com/questions/3131442/how-do-i-create-a-database-if-it-doesnt-exist-using-php – Fawzan

回答

1

您正在尋找

示例錯誤代碼:

$link = mysqli_connect('localhost', 'user', 'password', 'my_db'); 

// check if the connect call returned a database object 
if (!$link) { 
    // check the particular error number why the connect failed 
    if (mysqli_connect_errno() === ER_BAD_DB_ERROR) { 
     // the database does not exist, so build it now 
     build_db(); 
    } else { 
     // something else caused the connect to fail 
    } 
} 

這是假設恆定的ER_BAD_DB_ERROR存在。我沒有檢查它是否。如果不存在,則需要使用與由mysqli_connect_errno返回的正確錯誤代碼相對應的值來定義它。

您還可以使用mysqli_connect_error()獲得錯誤的文字表述和比較,而不只是錯誤代碼。

引述PHP手冊在哪裏可以找到的錯誤代碼:

客戶端錯誤消息編號在MySQL errmsg.h頭文件中列出,服務器錯誤消息編號列在mysqld_error.h。在MySQL源代碼分發中,您可以在Docs/mysqld_error.txt文件中找到錯誤消息和錯誤編號的完整列表。

注意,這仍然會顯示有關丟失的數據庫信息。您可以引入custom error handler此特定錯誤或只是把誤差抑制運營商在mysqli_connect用語,如前將其更改爲@mysqli_connect

+0

感謝。我通過使用錯誤抑制操作符來實現它,但意識到它可以抑制所有其他顯示錯誤。在這種情況下,我錯過了用戶名和密碼,只是它不存在而仍然建立數據庫。有沒有一種方法可以只顯示這個錯誤(ER_BAD_DB_ERROR)? –

+0

@NathanSiafa上面的代碼應該已經僅調用'build_db()'當此特定錯誤'ER_BAD_DB_ERROR'發生。任何其他錯誤將會轉到else塊。您也可以使用[mysqli_connect_error()](http://php.net/manual/en/mysqli.connect-error.php)獲得錯誤的文字表述和比較,而不只是錯誤代碼。 – Gordon

+0

我很抱歉。我知道我在build_db另一個連接(),其覆蓋我的連接,我已經修復它,它現在的作品完美。非常感謝。 –