After having a suggestion from the previous question
我现在使用数据库计算访问者数量。在编写脚本时,我有一个疑问因此得到了 SO 的帮助。
假设我的数据库有一个名为Total
的表,其值为5
。
两位不同的访问者同时访问该网站,我的脚本
$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
将尝试更新数据库。
现在我怀疑表中的新价值是什么?
5
或6
或7
或anything else
?
我知道这是一个罕见的案例,但使用该脚本的网站是测验网站,并会有大量访问者同时访问。
脚本的完整代码:
$sql = "SELECT * FROM visits WHERE Sr = '1'";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);
$date = $row['Date'];
$ttcounter = $row['Total'];
$ttcounter++;
$ttl = $ttcounter;
$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
答案 0 :(得分:0)
更简单的解决方案是像这样添加
$sqltc = "UPDATE visits SET Total=Total+1 WHERE Sr=1";
这只会在Total
的现有值中添加一个,您不再需要获取旧的行值并向其中添加内容,然后再次更新该行。
这也消除了2个访问者试图获取当前值Total
并且两个访问者用6覆盖当前值5的可能性。 MySQL将锁定行,以便一次只有一个访问者可以应用他们的更新,因此您获得正确的值7。