2016-11-21 100 views
-1

是的,這已經被問過。其他答案沒有幫助。mysql:使用php,mysqli_connect()失敗時如何捕獲錯誤?

我是mysql和php的新手。 我正在參加大學課程,在我面前有一個html-php-mysql項目。

我一直在編碼30年,並使用關係數據庫20年。所以我有一些經驗。是的,這是作業,但我已經寫了一些不起作用的簡單代碼。

我覺得核心問題是班級沒有教科書,我們被指示「在網上找到你需要的所有幫助」。 由於有很多方法可以使用php皮膚貓,找到與我的教師相匹配的示例一直是一個挑戰。查找不推薦的mysql_ *示例會使搜索更加困難。大多數代碼示例假設查詢將始終有效!和db連接。這是最後一點。我的PHP處理所有其他錯誤,我可以扔在它。

這段代碼是frankenstein,但我沒有得到這個工作。忍受我和代碼。

毫無疑問,製作此生產代碼需要做很多事情,但這不是目標。我想獲得玩具html文件和php腳本連接到一個玩具mysql數據庫,併產生一個近乎平凡的結果。所有這些考慮都不是密切相關的。

我強制連接失敗,所以我的代碼可以優雅地告訴用戶系統已關閉,並且我可以記錄該錯誤。

由於「rootx」無效導致php錯誤。

"PHP Warning: mysqli_connect(): (HY000/1045): Access denied for user 'rootx'@'localhost'" 

但是錯誤沒有被捕獲,「catch」被跳過並且「finally」子句運行。

mysqli_report(MYSQLI_REPORT_STRICT); 

被添加,因爲這條線修復了這個相同的問題。它沒有幫助。

可能是如何配置wamp?我所做的只是在安裝程序的指導下安裝在這個Windows 10機器上。

mysqli_report(MYSQLI_REPORT_STRICT); 
try { 
    $conn = mysqli_connect('localhost', 'rootx', '', 'csc443'); 
          // server,  username, pw, dbname 
    } 
} catch(Exception $e) { 
    log_action("dbconnectfail " . $username . " | " . $e->getCode() . " | " . $e->getMessage()); 
    header('Location: 500.php'); 
    return;  
} finally { 
    log_action("dbconnect localhost::csc443"); 
} 
+0

發生錯誤時連接將返回false。檢查值是否爲假 –

+0

我強制連接失敗。我希望連接失敗,以便測試檢測登錄失敗的代碼。 我的問題是編寫可以優雅地處理這個錯誤的代碼。 我以爲try-catch-finally是一個不錯的選擇,因爲mysql會拋出一個記錄錯誤! –

回答

0

刪除所有try,catch和finally子句。使用下面的代碼來確定問題的聯繫。

$conn = mysqli_connect('<server>', '<username>', '<password>', '<database-name>'); 
if (!$conn) { 
    // whatever processing you want to do upon error in connection 
    // like log error or send an email to admin 
    // I am just printing the error at the moment. 
    echo mysqli_connect_errno() . ":" . mysqli_connect_error(); 
    exit; 
} 

Official documentation摘錄。

+0

我強制連接失敗。我希望連接失敗,以便測試檢測登錄失敗的代碼。 我的問題是編寫可以優雅地處理這個錯誤的代碼。 我以爲try-catch-finally是一個不錯的選擇,因爲mysql會拋出一個記錄錯誤! –

+0

哦.......你確定連接證書不正確嗎? –

+0

正如我上面所說,在我原來的問題,我強迫連接失敗我可以測試一些代碼。 –

相關問題