假设我想在每次有人访问网页时增加数据库中的计数器。
名为“example”的数据库如下所示:
|姓名......|值(value)........................| ID |
====================
|计数......| 5................| 1 | <----第一行
网页上的代码如下所示:
$db = mysqli_connect("localhost", ....);
$q = "SELECT Value FROM example WHERE id = '1'";
$r=mysqli_query($db, $q);
$result = mysqli_fetch_array($r);
$increment = $result[0] + 1;
$q = "UPDATE example SET Value = '$increment' WHERE id = '1'";
mysqli_query($db,$q);
如果两个人同时访问该网页,A 会获取值 5,紧接着 B 会获取相同的值。他们都会将其增加到 6,并依次执行更新,输入 6 作为计数器值,而实际上应该是 7,因为有两个人访问了该页面。我怎样才能防止这种情况发生?
最佳答案
您可以用一条语句来完成:
"UPDATE example SET Value = Value + 1 WHERE id = '1'";
因此,在您的读取和更新之间也没有其他任务可以更改它。
这是您的脚本
$db = mysqli_connect("localhost", ....); $q = "更新示例 SET Value = Value + 1 WHERE id = '1'"; mysqli_query($db,$q);
关于php 和 mySQL 数据库并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778007/