如何每 ip/session 仅更新一次列?

How to UPDATE a column only once per ip/session?

我正在尝试创建 hit counter,但是每次加载页面时 hit counter 都会更新列 counter

$mread = $conn->prepare("UPDATE bn_publicacao SET counter = counter + 1 WHERE id = :id");
$mread->bindParam(':id', $id, PDO::PARAM_INT);
$mread->execute();

我希望它每 ip/session 只更新一次 counter。我该怎么做?

session_start();

可选: 检查会话是否开始。 这可能是一个设置会话配置的函数。

if(function_exists('session_status')){
   if(session_status() != PHP_SESSION_ACTIVE)die('no session');
}else{
  die('no session');
};

会话启动并配置后,您可以使用$_SESSION中的变量。

   if(empty($_SESSION['counter']))
    {
        $_SESSION['counter'] = 1;
        $mread = $conn->prepare("UPDATE bn_publicacao SET counter = counter + 1 WHERE id = :id");
        $mread->bindParam(':id', $id, PDO::PARAM_INT);
        $mread->execute();
    };

只有当 $_SESSION['counter'] 不存在时,它才会 运行 查询代码。

这只是每个会话一次的计数器示例,而不是查询。