刷新後是否有更簡單的方法來防止重複插入?我現在的做法是選擇除ID之外的所有字段作爲參數;如果存在我不插入的記錄。有沒有辦法檢測刷新?檢測重複插入
檢測重複插入
回答
我想你可能想要EXISTS功能。 下面是我通過google找到的EXISTS的簡單解釋。
你使用了哪些數據庫?如果它是MySQL,並且您的實施的某些其他因素保持一致,則始終可以使用編輯:觸擊SQL ServerINSERT IGNORE INTO ...
。
或者,您可以創建「處理程序」頁面,例如,你的過程是這樣的:
- 用戶試圖執行「行動」
- 用戶發送到「doAction.xxx」
- 「doAction.xxx」完成,並重定向到「actionDone.xxx」
- ???
- 利潤!
編輯:重新讀你的問題後,我要更傾向於第二種解決方案;通過使用重定向創建中間頁面(通常是HTTP/1.1 303 See Other),通常可以防止這種混淆。在數據庫中檢查唯一標識符總是一個好主意,但對於不希望刷新重複最後一個操作的簡單情況,這是一個優雅且完善的解決方案。
我使用sql server – Eric 2009-11-04 14:08:02
我同意@Austin Salonen,您應該首先保護具有主鍵,唯一約束和外鍵的數據庫。
這樣做,許多網站將包括一些JS提交按鈕後立即禁用按鈕發送請求之前。這樣,雙擊的用戶不會發送兩個請求。
JS技巧非常適合減少服務器的負載,但它不會保護你。關掉JS甚至惡意提交多個請求的用戶呢? – rmeador 2009-11-03 22:37:08
@rmeador - 同意。沒有數據庫保護,沒有真正的解決方案。 JS技術只能被認爲是方便用戶使用的。 – 2009-11-03 22:56:52
我提出了在提交請求(插入到數據庫中的記錄)後將用戶重定向到另一個(確認)頁面的選項。這樣他們將無法刷新。
你也可以有一個標誌,指示插入請求是否已經提交,它要麼存放的頁面(使用JavaScript),或在會議上。您也可以進一步將其存儲在其他地方,但這是您的Web應用程序的架構決定。
如果您正在使用AJAX請求中插入一條記錄,然後這是一個有點很難防止這種在客戶端。
我寧願做一個指標/標誌,然後比較字段。這當然取決於你的記錄。例如,如果它是一個簡單的商店,並且用戶想要做出相同的訂單,那麼您會將其視爲重複的訂單並有效地阻止該功能。
像Dereleased說,使用基於303重定向。使表單提交使用POST,然後保存後,它發送一個303標題,並通過位置標題將它們發送到提交後的URL,該標題將通過GET獲取,刷新不會重新發布數據。
自從我做了任何真正的網絡工作已經很長時間了。但回到1.1天后,我記得使用與回傳相關聯的ID來確定刷新是否發生。
快速搜索後,我覺得這是我根據我的解決方案從文章:
http://msdn.microsoft.com/en-us/library/ms379557(VS.80).aspx
它基本上展示瞭如何建立一個新的頁面類,你可以繼承。當你正在做一些不應該在刷新時重複的事情時,基類將公開一個你調用的方法,以及一個IsPageRefresh方法來跟蹤是否發生刷新。
這篇文章是許多類似目標變化的基礎,所以它應該是一個很好的開始。不幸的是我不記得它是如何真的給予更多的幫助。
- 1. 檢查重複插入
- 2. 自加入重複檢測
- 3. 當添加檢測重複插入許多一對多關係
- 4. 重複插入
- 5. 插入SQLite時檢查重複
- 6. 檢測重複集
- 7. 插入無重複
- 8. 重複插入ASP.NET
- 9. orbeon插入重複
- 10. 「在重複更新插入」仍然插入重複項
- 11. Mysql插入重複鍵非重複鍵
- 12. 檢測到重複帖子
- 13. 檢測重複項,Listview?
- 14. CRM中的重複檢測
- 15. Doctrine 2重複檢測
- 16. 檢測usb pendrive插入iplescript
- 17. 如何在插入新聯繫人時檢測到重複的聯繫人?
- 18. 將重複ID插入列
- 19. SQL不插入重複項
- 20. 避免重複在插入
- 21. cel_pgsql插入重複的列
- 22. 如何插入不重複?
- 23. 重複鍵插入在phonegap
- 24. DB中的重複插入
- 25. 插入重複記錄LINQ
- 26. MariaDB重複被插入
- 27. Android Php Mysql插入重複
- 28. 多行插入重複行
- 29. MongoDB插入沒有重複
- 30. 停止插入重複
我喜歡這種方式。但是,如果我比較空值呢?因爲我會說= null,沒有東西可以= null,但它可以是isNull。 – Eric 2009-11-04 14:54:10
你可以嘗試在可能爲空的字段中添加一些類似於「IS NOT NULL」的查詢。很難確定沒有看到查詢的例子。 – ChadNC 2009-11-04 20:01:22