2012-01-12 75 views
2

如果以前有人問過這個問題,我很抱歉,但是我很長一段時間找不到答案。PDO如何獲取MySQL數據庫中INSERT的重複鍵列名稱?

問題是,當試圖在具有多個UNIQUE鍵的MySQL表中插入一行時。如果我們採取以下表作爲參考:

---------------------------------------- 
| id | username |  email  | 
---------------------------------------- 
| 1 | myuser | [email protected] | 
---------------------------------------- 

兩個用戶名電子郵件是唯一鍵。如果我使用username ='myuser'運行查詢來插入新行,那麼重複條目和消息中的某些文本會出現1062錯誤,說明ID 3的密鑰是重複的。事情是這樣的:

array(3) { 
    [0]=> 
    string(5) "23000" 
    [1]=> 
    int(1062) 
    [2]=> 
    string(34) "Duplicate entry 'myuser' for key 3" 
} 

是否有PDO的方式得到重複列的名稱,這樣我就可以顯示出她的需要,因爲這個錯誤的改變這領域的用戶?

因爲情況是這兩個字段可以重複,或者只是第一個/第二個,我需要告訴用戶確切地是哪個字段。

我認爲解析短信和硬編碼密鑰的ID,但有人可以在明天更改數據庫中的密鑰,放下密鑰或添加一個新密鑰,並且該密鑰號似乎不是一個可靠的來源的信息。

或者最好的選擇是選擇所有的值,在INSERT之前檢查它們的鍵?

謝謝!

+0

這個錯誤信息是否真實?我發現「對於關鍵3」部分有點奇怪的原因,它應該說用戶名......我想。 – softarn 2012-01-12 15:21:51

+0

是的,這是真的。 – middlehut 2012-01-12 15:30:25

回答

4

不,沒有辦法獲得更好的錯誤信息,哪些表失敗。您在陣列中看到的消息「密鑰3的重複條目'myuser'」幾乎就是您想要的信息。數字3實際上是您製作的索引的名稱。您可以更改爲更有意義的內容,如「用戶名」,並獲得更好的錯誤消息,您可以將其轉發給用戶。如果您想製作自定義錯誤消息,則必須從該消息中提取您想要的信息。

1

同意,沒有辦法獲得有關UNIQUE錯誤的有用報告。真正最好的解決方案是在INSERT之前調用SELECT並自行處理結果。它會影響性能,但大多數應用程序插入的頻率較低,因此您可能會忽略它。

相關問題