我有以下情況:
我有幾個用戶查看的項目列表,每個項目可以通過單擊每個項目右側的按鈕「獲取」由單個用戶獲取,我想知道是否檢查項目的狀態(項目表中的布爾型獲取:true/false)足以確保一個項目不能被多個用戶獲取?或者是否有任何實際的方法來做到這一點在PHP/MySQL? 親切地, 優素福。併發PHP/MYSQL
回答
我想知道是否檢查項目的狀態(獲取的項目表中的布爾值:true/false)是否足以確保項目不能被多個用戶獲取?
取決於您如何使用它。如果你的代碼確實沿此線的東西:
if (current status of item is "free") {
update status of item to "taken";
}
那麼將無法正常工作,因爲沒有了「檢查」和「更新」,其中另一個進程可以穿過的,並採取項目之間的差距爲自己!但是,如果你有一列,以指示該用戶聲稱的項目,沿着這條SQL查詢的東西行會的工作:
UPDATE items SET claimed_by = :current_user
WHERE item_id = :id AND claimed_by IS NULL
這個查詢將拒絕更新這已經聲稱一個項目,你可以檢查該項目的claimed_by
以確保您在繼續之前得到它。
在純粹的PHP沒有,作爲一個PHP頁面不能動態更新自己。
但是使用AJAX是可以做到的。無論是實用的還是另一個故事,因爲它取決於你想檢查的項目數量。即使這樣,總會有一個延遲,這取決於服務器速度,用戶連接速度等。
最好的辦法是在用戶按下獲取後有一條消息說「正在檢查」使用AJAX進行檢查,並以先到先得的原則先到達那裏,但仍然會得到該項目。
所以你的下一步將是查找AJAX(Javascript)。
另一種方法是做一個完整的頁面重新加載來檢查項目是否仍然可用,並預先顯示一個免責聲明,這將發生。由於完整的頁面重新加載,這種方法僅需要比使用AJAX更長的時間。
謝謝你的回答,我不希望項目從用戶屏幕上消失,我想要的只是如果兩個用戶在同一時間點擊獲取只有一個將獲得該項目。 – hereForLearing
@saywow然後AJAX是要走的路。 –
Ajax並不是我的問題的解決方案,因爲正如我在評論中解釋的那樣,我的問題不是隱藏不可用的項目,但是如果兩個用戶想要在同一時間獲取同一項目:雙擊同時獲取兩個檢查項是否可用,在這種情況下答案是肯定的,因此兩者都會獲得它(這會導致錯誤,因爲在我的數據庫中它是一對多的關係),那麼我該怎麼做避免錯誤 – hereForLearing
- 1. Javascript和PHPMySQL
- 2. 使用phpmysql搜索
- 3. 登錄使用phpmysql
- 4. 鼠標懸停doTooltip在phpmysql
- 5. 在phpmysql級聯混淆
- 6. phpMySQL應該可以工作
- 7. PHPMySql數組插入到表
- 8. 如何發佈在插入函數的兩個ID在phpMySQL
- 9. phpmysql查詢腫瘤學評估工具
- 10. 會話和登錄phpmysql幫助
- 11. 在PHPmySql中登錄網站編程
- 12. phpmysql錯誤 - #1273 - #1273 - 未知歸類:「utf8mb4_general_ci」
- 13. phpmysql更新設置,而上傳圖片
- 14. 如何在phpmysql中的datetime +1個月?
- 15. 如何用phpmysql中的htmlspecialchars用戶nl2br函數
- 16. 插入phpmysql形式而無需刷新頁面
- 17. 如何在phpmysql中比較日期時間和時間
- 18. 連接網站上託管服務器,以我的本地phpmysql
- 19. 查詢在PhpMySQL中執行,但不在Zend_Framework中
- 20. 在PHPMYSQL中分配一次性用戶名
- 21. 如何在使用phpmysql的超鏈接中使用urlencode
- 22. 如何通過phpmysql爲一個表設置用戶登錄?
- 23. 使用phpmysql刪除複選框數據庫
- 24. 無法使用PHPExcel將Excel中的數據導入到phpMySql中
- 25. 如何使用phpmysql進行考勤查看?
- 26. phpmysql轉儲不工作,如果密碼有「(」或「)」或「&」
- 27. PHPMySQL查詢數據庫與字符串/數組結果問題
- 28. 如何使用phpmysql形式插入多個數據?
- 29. WCF併發,並OptimisticConcurrencyException
- 30. 併發
問題是,我將不得不更新和做一些插入查詢,我可以檢索更新返回來檢查更新是否發生?並基於這個答案,我決定是否插入查詢或不。這100%會工作嗎?我的意思是如果兩個用戶在同一時間執行更新查詢? (可能嗎?^^') – hereForLearing
您可以查看UPDATE查詢更新的行數,或者之後運行SELECT並檢查「claims_by」的新值。至於併發性:數據庫服務器將序列化查詢。不管這些查詢有多少同時運行,只有其中一個會更新「claims_by」的值,其餘部分不會執行任何操作。 – duskwuff
好的,先生,謝謝,我接受了你的回答。 – hereForLearing