2010-05-03 78 views
1

在插入我趕上了唯一約束mysql_errno()1062PHP MySQL的INSERT失敗,因爲唯一約束

這工作得很好,但我想找到現有的行復權或修改。

是否有方法可以在插入失敗時獲取行ID?我試過mysql_insert_id()但意識到只會返回我插入的行(或插入失敗),因此,我得到0.

是否有沒有選擇,只能發出另一個mysql_query,只需執行select值?

我只是想確保沒有更好,更快,更經濟的方法來做到這一點。

+0

除了首先選擇其他方式。 – 2010-05-03 05:16:16

回答

2

如果您正試圖插入行,如果新的或更新現有的值,然後REPLACE INTO是你需要的。如果存在約束,則考慮INSERT ... ON DUPLICATE KEY UPDATE Syntax,因爲REPLACE INTO將DELETE,然後INSERT。

+0

不替換刪除現有的行嗎?我想在覆蓋之前看到該行和內容,或者至少讓用戶選擇修改它。 – sjw 2010-05-03 05:05:39

+0

它確實 - 如果你需要檢索行,如果它已經存在,那麼除了使用SELECT語句之外,我不會看到其他任何選項。 – 2010-05-03 05:07:36

0

您必須檢查表中是否存在任何「唯一」鍵(SHOW CREATE TABLE會將它們全部列出),然後在您嘗試的插入查詢中查詢表中的關聯值。所以,如果你要插入域A,B,C,d和B,C對他們的唯一鍵,則:

SELECT id, B, C FROM table WHERE B=$B and C=$C;