【问题标题】:php and mysql hit counter, counting once onlyphp 和 mysql 命中计数器,只计数一次
【发布时间】:2014-09-09 08:56:02
【问题描述】:

我尝试了几种方法,但我只能算一次。我在想我的数据库一定有问题吗?当我将我的数据库列“计数”重置为 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();
?>

【问题讨论】:

  • 你想做什么?
  • 您只是检查查询是否成功运行,您不会从查询中返回任何数据,因此$count 不会评估任何内容
  • 它是一个计数器,我希望它在每次有人进入我的网站或刷新时加 1
  • 您正在运行查询以获取计数值,但随后不使用它。您需要使用查询返回的计数,将其递增并再次存储。

标签: php mysql sql counter hit


【解决方案1】:

那是因为刷新页面时$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_*prepared statements

【讨论】:

  • 谢谢,我想我明白了,我添加了 $count = mysql_result($query_run, 0, 'count');在count++之前所以它知道以前的值?我说的对吗?
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答
【解决方案3】:

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

你需要 -

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

注意,我建议您不要在数据库中使用 count 作为字段名称,因为它在 MySQL 和 PHP 中都是保留字。它可能会导致意外错误/输出。 Try having a look at this thread

试试这个 (assuming you have PDO and your connection declared),因为已经指出您使用的逻辑与您的查询有问题。

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;

【讨论】:

  • 感谢您的回答
  • 如果你有时间,请按照上面的最佳答案,或者最好是 PDO 来查看 mysqli。这是值得的,而且更容易写/读。
猜你喜欢
  • 2013-09-28
  • 2015-07-20
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多