0

我尝试了几种方法,但我只能算一次。我在想我的数据库一定有问题吗?当我将我的数据库列“计数”重置为 0 并刷新页面时,它计数为 1,但之后不再。

<?php
function update_count() {
    $query = "SELECT `count` FROM `hits`";
    if($query_run = mysql_query($query)) {
        $count++;
        echo $count;
        $query_count = "UPDATE `hits` set `count`='$count'";
        mysql_query($query_count);
    }
}
update_count();
?>
4

3 回答 3

3

那是因为刷新页面时$count丢失了,需要从数据库中重新选择:

$query = "SELECT `count` as cnt FROM `hits`";
$results = mysql_query($query);
$count = mysql_fetch_array($result); // take only the first row.
print_r($count['cnt']);

一个简单的说明,mysql_*函数是不推荐使用mysqli_*准备好的语句

于 2014-09-09T09:03:36.933 回答
2

您没有将数据库中的计数分配给变量,而只是增加一个新变量(这应该会引发错误 - 注意:未定义的变量:计数... - 您是否禁用了错误检查?)而没有实际分配您的数据库值. 因此为什么你总是得到 1 - 你正在创建一个新的值 0 并在每次刷新时向它添加 1。

你需要 -

$row = mysql_fetch_row($result);
$count = $row[0];
$count++;

注意我建议您不要在数据库中使用 count 作为字段名称,因为它在 MySQL 和 PHP 中都是保留字。它可能会导致意外错误/输出。试着看看这个线程

试试这个(假设你有 PDO 和你的连接声明),因为已经指出你使用的逻辑与你的查询有问题。

function updateCount() {

# Update count
$queryUpdate = $db->prepare('UPDATE hits SET hitcount = hitcount + 1');
$queryUpdate->execute();

# Get the updated count value
$queryCount = $dbo->('SELECT hitcount FROM hits');
$queryCount->execute();

    # Check that a result is returned and assign result 
    if ($result = $queryCount->fetch(PDO::FETCH_OBJ) {
    return $result->hitcount;
    }

}

# Echo returned value
$value = updateCount();
echo $value;
于 2014-09-09T09:11:04.383 回答
2

当您刷新页面(或再次运行脚本)时,没有前一次执行的“直接”记忆。脚本结束时,您的$count价值将丢失。(即使您update_count在代码中多次调用,$count也仅在您的函数范围内设置)

如果你想实现类似的东西,你将不得不以某种方式存储该计数:在 cookie 中、在数据库中或(但可能是最糟糕的方式)直接在文件中。

于 2014-09-09T09:00:50.640 回答