2014-12-10 47 views
0

我有一個類將用戶從註冊表單插入到數據庫中。我插入4件東西:用戶名,密碼,鹽和電子郵件。我正在使用errno 1062來檢查重複條目。但我需要檢查具體的重複條目。例如,我有這個檢查errno 1062的邏輯,但是它並不特定於被檢查的用戶名,它只是檢查errno並假設它是重複的用戶名。通過Errno顯示特定錯誤消息1062

if ($stmt->affected_rows == 1) { 
     $this->success = "$this->username has registered. You can now log in."; 
    } elseif ($stmt->errno == 1062) { 
     $this->errors[] = "$this->username is already in use. Please chose another."; 
    } else { 
     $this->errors[] = 'Sorry, there was an issue with the database.'; 
    } 

我的問題是,我如何使用錯誤號1062來檢查這兩個用戶名,電子郵件或兩者兼而有之?看起來像errno 1062只是檢查任何重複的條目。

+0

不知道你在問什麼。您是否嘗試過使用重複電子郵件的非重複用戶名,反之亦然? – 2014-12-10 22:23:09

回答

0

errno只返回一個整數,沒有關於發生什麼錯誤的其他信息,但是您應該能夠使用錯誤獲取更多信息。

the manual,如果你有一個錯誤號1062,誤差應在這種格式的字符串:對鍵 '%s' 的

您可以

重複條目 '%s' 的使用普通的PHP字符串函數解析該字符串以獲取所需的數據。如果你有多個錯誤,它只會「抱怨」它發現的第一個錯誤(至少在我的服務器上),所以要注意你最終可能會要求用戶修復一件事,然後回來糾正另一件錯誤,等等。 。 我知道,以改善這一點的唯一方法是單獨運行簡單的查詢:

SELECT COUNT(*) FROM table WHERE email = '[email protected]' 

PS你真的想阻止重複密碼嗎?

+0

我不會阻止dup密碼。我阻止了複製和電子郵件。 – 2014-12-15 15:09:31