php访客计数器不工作

时间:2014-06-07 14:38:47

标签: php mysql

我遇到了mysql的问题。我的PHP代码无效。

<?php
mysql_connect("localhost", "root", "root") or die("Unable to connect to the database");
mysql_select_db("visitor_counter") or die("Database is not created");
$find_counts = mysql_query("SELECT * FROM user_count");

while($row = mysql_fetch_assoc($find_counts))
{

 $current_count = $row['counts'];
 $new_count = $current_count + 1;
 $update_count = mysql_query("UPDATE 'visitor_counter' . 'user_count' SET
'counts'=$new_count");

}

?>

我已经测试过在我的代码上添加一些回音。一旦我将echo代码放在while循环上,回声就不起作用了。任何人都可以帮助我。

6 个答案:

答案 0 :(得分:0)

使用单个查询:

UPDATE `visitor_counter`.`user_count` SET `counts`=`counts`+1;

然后执行SELECT ... FROM

因为将变量传递给sql查询以进行此类操作并不总是安全的

这是你的代码:

<?php
mysql_connect("localhost", "root", "root") or die("Unable to connect to the database");
mysql_select_db("visitor_counter") or die("Database is not created");

mysql_query("UPDATE `visitor_counter`.`user_count` SET `counts`=`counts`+1");

$counts = array();
$result = mysql_query("SELECT * FROM user_count");
while($data = mysql_fetch_assoc($result)) {
    $counts[$data['id']] = $data['counts'];
}
?>

答案 1 :(得分:0)

试试这个:

mysql_connect("localhost", "root", "root") or die("Unable to connect to the database");
mysql_select_db("visitor_counter") or die("Database is not created");
$find_counts = mysql_query("SELECT * FROM user_count");
$current_count = 0;
while($row = mysql_fetch_assoc($find_counts))
{
 $current_count = $row['counts']; 
}
$new_count = $current_count + 1; 

$update_count = mysql_query("UPDATE 'visitor_counter' . 'user_count' SET
'counts'=$new_count");

答案 2 :(得分:0)

你在这里尝试什么?

mysql_query("UPDATE 'visitor_counter' . 'user_count' SET 'counts'=$new_count");

表名是什么?

我猜您的表名是user_count

或者您想要更新多个表名吗?!?!?

如果tablenam eis user_count它应该看起来像

$update_count = mysql_query("UPDATE user_count SET counts={$new_count}");

所以总时间是

while($row = mysql_fetch_assoc($find_counts))
{

 $current_count = $row['counts'];
 $new_count = $current_count + 1;
 $update_count = mysql_query("UPDATE user_count SET counts={$new_count}");

}

重要

不要使用

  

&#39;表名&#39;

在您的SQL查询中

...如果您想声明一个表名,请使用

  

`tablename`

答案 3 :(得分:0)

通过更改代码检查SELECT查询是否有效:     mysql_query(“SELECT * FROM user_count”)或die(mysql_error());

检查de table user_count中是否有数据并编辑查询:

while($row = mysql_fetch_assoc($find_counts))
{
    print_r($row); //to print the database row
    $current_count = $row['counts'];
    $new_count = $current_count + 1;
    $update_count = mysql_query("UPDATE user_count SET counts=".$new_count); // no need to specify the database, you already did with mysql_select_db. 

}

答案 4 :(得分:0)

不需要指定DB,引号错误,请更改为:

$update_count = mysql_query("UPDATE user_count SET counts = $new_count");

您可能还想指定一个页面:

$update_count = mysql_query("UPDATE user_count SET counts = $new_count WHERE page = '$this_page'");

答案 5 :(得分:0)

我很高兴看到这里的每个人都使用旧的和已弃用的mysql函数发布代码(尽管有些人说这是错误的)。我想建议你反对使用mysql函数 - 从version 5.5起不推荐使用它们。您应该使用mysqliPDO代替。在我看来,您应该使用PDO,因为它为几乎所有数据库提供支持,您可以使用预准备语句。

现在你的代码 - 我不太清楚为什么会使用一个循环来计算counts列中的所有记录。更好的方法是使用atomic increment - 它还可以保证您的计数器正确递增,以防两个查询同时尝试递增值。虽然您还没有发布您的表格结构,但我相信这样的事情应该可以完成这项工作:

<?php

// Database connection settings
$db_host = '127.0.0.1';
$db_name = 'visitor_counter';
$db_user = 'root';
$db_pass = 'root';

// Try to connect to the database
try {
    $dsn = 'mysql:host='.$db_host.';dbname='.$db_name;
    $db = new PDO($dsn, $db_user, $db_pass);
} catch ( PDOException $e ){
    // Do something if connection could not be established
    throw new ErrorException("Could not connect to database!",0,1,__FILE__,__LINE__,$e);
}

// Find counts
// Assuming you have a user_id column in your `user_count` table.
$user_id = 1;

// Update counter
$update = $db->prepare('UPDATE user_count SET counter=(counter+1) WHERE user_id = :user_id');
$update->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$update->execute();

?>

P.S。在此代码中,我假设您要在user_count.counter列中保存访问者计数器,并且每当有人访问该用户时,counter列会针对该特定用户递增,而不是更新所有用户的计数器(如代码所示)。