我可以在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.";
}
在嘗試將其插入數據庫之前,您應該確實驗證用戶輸入。您還應該使用[Prepared Statements](準備好的語句)(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php),而不是連接SQL字符串,因爲它消除了[SQL注入攻擊] (http://php.net/manual/en/security.database.sql-injection.php)。 –
我在早期的行中驗證了用戶輸入,並且這段代碼幾乎是代碼的結尾,在這裏我將驗證和修剪後的用戶輸入數據插入到db中。在這裏,我嘗試獲取插入過程中可能發生的任何意外錯誤。 – Masoud
如果您在驗證後仍然在特定列上發生特定錯誤,那麼您的驗證需要更改,而不是數據庫部分(除了我在第一條評論中提到的內容)。 –