我遇到了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循环上,回声就不起作用了。任何人都可以帮助我。
答案 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}");
}
不要使用
在您的SQL查询中&#39;表名&#39;
...如果您想声明一个表名,请使用
`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起不推荐使用它们。您应该使用mysqli
或PDO
代替。在我看来,您应该使用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
列会针对该特定用户递增,而不是更新所有用户的计数器(如代码所示)。