如何将 1 添加到我的数据库中的 "kijkers" table。用于统计网站被访问的次数

How to add 1 to my "kijkers" table in my database. It is for counting how many times the site is visited

我有这段代码,它应该在您打开网站时加 1,但它会将当前数字加 1 并且不会更新它。它应该更新它以便正确显示访问量。 "Kijkers" 是 0,所以当我打开它时它会变为 1,但之后它不会更新它。

我尝试改变一些东西但没有成功。

<?php
    include 'db_conn.php';

    $find_counts = "SELECT * FROM visitors";
    $result = mysqli_query($conn, $find_counts);
    while ($row = mysqli_fetch_assoc($result)) 
    {
        //Kijkers = 0 in database
        $current_counts = $row['Kijkers'];
        $new_count = $current_counts + 1;
        $update_count = "UPDATE visitors SET Kijkers='$new_count'";

        echo $new_count;
    }

?>

我预计它会更新它并在刷新或重新加载页面时继续加 1。

您不必事先获取 Kijkers 的当前值。您可以只向数据库发送一个增量语句。

像这样:

UPDATE visitors SET Kijkers=Kijkers + 1;

你的方法有两个问题。

第一个是您没有执行更新查询。这可以通过添加 mysqli_query($conn, $update_count) 语句轻松解决。

第二个问题有点隐蔽:你的事务不是原子的。考虑以下两个用户几乎同时访问的情况。假设此时 Kijkers 的值为 10:

User A            | User B
------            | ------
select value 10   |
                  | select value 10
update value 11   |
                  | update value 11
                  |
                  V

因此,即使有两次单独的访问,您的计数也只增加了一次。

因此,最好只根据数据库中的当前值执行更新查询:

$update_count = "UPDATE visitors SET Kijkers = Kijkers + 1";

if (mysqli_query($conn, $update_count)) {
    echo "<br>Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

这是一个原子操作,解决了上述问题。