假设我有一种论坛,其中包含用户/管理员可以访问/管理的主题。用户访问某个主题时出现问题:问题
当用户访问它时,首先我会检查该主题是否存在;如果用户已经访问了该主题,我会向系统添加一个标记。
这将是基本的代码:
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