2016-08-25 37 views
2

我可以在php中使用mysqli_error()函數獲取MySQL錯誤,但我不想向用戶顯示MySQL發送的錯誤。我想獲取錯誤與其相關的字段或列的名稱,並告訴用戶應該更改「示例」字段中的輸入。我知道我可以在PHP中使用像strpos()這樣的函數來檢查錯誤表達式是否包含列的名稱,但正如您所知,某些MySQL錯誤表達式包含表中所有列的名稱,在這裏我可以' t決定在哪個輸入欄顯示錯誤?
有沒有像例如mysqli_error_column()這樣的函數來獲取列的名稱會引發錯誤?或任何其他建議?如何找出MySQL中的哪個列與PHP有關?

$sql = "INSERT INTO customers (password, active, email, active_code, submit_date)VALUES('$codedPass', '0', '$email', '$verificationKey', '$currDate')"; 
     $insertResult = mysqli_query($conn,$sql); 

     if(!$insertResult) { 
      $queryError = mysqli_error($conn); 
      if(preg_match("/\b"."email"."\b/",$queryError)) { 
       $php_input_error['email'] = $error_msg['unknown']; 
      } 
      else if(preg_match("/\b"."password"."\b/",$queryError)) { 
       $php_input_error['pass'] = $error_msg['unknown']; 
      } 
      else $php_input_error['general'] = "there's an error with your inputs, please check them again."; 
     } 
+0

在嘗試將其插入數據庫之前,您應該確實驗證用戶輸入。您還應該使用[Prepared Statements](準備好的語句)(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php),而不是連接SQL字符串,因爲它消除了[SQL注入攻擊] (http://php.net/manual/en/security.database.sql-injection.php)。 –

+0

我在早期的行中驗證了用戶輸入,並且這段代碼幾乎是代碼的結尾,在這裏我將驗證和修剪後的用戶輸入數據插入到db中。在這裏,我嘗試獲取插入過程中可能發生的任何意外錯誤。 – Masoud

+0

如果您在驗證後仍然在特定列上發生特定錯誤,那麼您的驗證需要更改,而不是數據庫部分(除了我在第一條評論中提到的內容)。 –

回答

2

我不認爲有其他方法可以做到這一點。

但是,我會建議你完全不同的解決方案: 它將很好驗證數據之前發送到DB(在PHP代碼中)。

在這種情況下:

  1. 您可以實現任何複雜的驗證規則(長度, 允許符號,數據排序, 場之間的依賴關係的驗證,等等)。
  2. 你會知道關於錯誤的所有信息。所以你可能會向用戶展示更多可理解的信息。
  3. 您將減少數據庫服務器的負載。
+0

我在早期的行中驗證了用戶輸入,並且這段代碼幾乎是代碼的結尾,在這裏我將驗證和修剪後的用戶輸入數據插入到db中。在這裏,我嘗試獲取插入過程中可能發生的任何意外錯誤。 – Masoud

相關問題