2013-02-10 87 views
1

用純PHP代碼(而不是框架)是否有處理mysqli的錯誤更優雅的方式,如下圖所示:PHP更優雅的方式來處理mysqli的錯誤

if (!mysqli_query($con, $sql)) { 
      # Throw error so we can handle them 
      echo mysqli_error($con); 

      # handle a duplicate email 
      if (strpos(mysqli_error($con), "email_UNIQUE") !== false) { 
        $_SESSION["errors_found"] = true; 
        array_push($_SESSION["error_messages"], "Email given is already registered."); 
      } 

      # handle a duplicate username 
      else if (strpos(mysqli_error($con), "username_UNIQUE") !== false) { 
        $_SESSION["errors_found"] = true; 
        array_push($_SESSION["error_messages"], "Username is already taken."); 
      } 

      # handle any other sql query error... 
      else { 
       die("Database query error: " . mysqli_error($con)); 
      } 
    } 
+0

在這種情況下是的。你有更好的方法來建議嗎?非常感謝您的幫助。 – 2013-02-11 01:50:58

回答

0

首先,我不會把這樣的過程「處理mysqli錯誤」,而是「用戶輸入驗證」。
其次,我不會以這種方式進行這種驗證。

我一直覺得用戶對數據庫的輸入通常是使用SELECT查詢而不是INSERT查詢來驗證的。
它不僅使您的應用程序無錯誤,而且使其更加靈活,例如允許單獨驗證基於AJAX的註冊。

至於真正的mysqli錯誤 - 你真的必須處理他們,而不僅僅是死亡。
最方便又簡單的方法將拋出一個異常:

if (!mysqli_query($con, $sql)) { 
    throw new Exception(mysqli_error($con)); 
} 

將根據站點範圍的錯誤處理設置得到妥善處理,並且還提供無價的跟蹤日誌。

+0

我從來沒有考慮過選擇方法,而不是在這裏強制插入。另外,感謝提到錯誤處理與「扔」。 – 2013-02-11 01:52:03

+0

另外,如果我可能會問,你會如何做你的「用戶輸入驗證」? – 2013-02-11 02:02:02