假設我有一種論壇,其中包含用戶/管理員可以訪問/管理的主題。用戶訪問某個主題時出現問題:問題
當用戶訪問它時,首先我會檢查該主題是否存在;如果用戶已經訪問了該主題,我會向系統添加一個標記。
這將是基本的代碼:
1 if((isset($_GET['trackid'])) && (ctype_digit($_GET['trackid']))) {
2 $query=mysql_query("SELECT date, user, zone, artist, event, data, res, complete, notes FROM topic WHERE trackid='".$_GET['trackid']."'",$mydb);
3 if(mysql_num_rows($query)!=0) {
4 echo "Ok, The topic exist! Now I can say to the system that I have visited the topic"
5
6 if (isset($_SESSION['nickname'])) $insert=mysql_query("INSERT IGNORE INTO recent_adds (user, trackid) VALUES ('".$_SESSION['nickname']."','".$_GET['trackid']."')",$mydb);
7 }
8 }
現在,假設User A
到達4號線,同時管理員(User B
)刪除此主題(trought特殊功能的管理員,但該並不意味着這麼多):它會向數據庫中插入不一致的數據。 (事實上這個話題不會再存在)。
做這種操作的主要論壇/系統如何擺脫這種併發問題?
如果設置了主題視圖,它很簡單,這意味着有人正在查看它,因此刪除應該等到主題視圖在會話,cookie或數據庫中處於活動狀態時,才能使用您的scenerio。 – 2011-04-30 10:30:32