MYSQL命中计数器

时间:2013-05-26 17:31:15

标签: php sql

所以我试图让每个用户名都有一个独特的点击计数器。

我正在尝试这样做,以便如果用户名不在数据库中,它会将用户名插入名为username的字段中,并将1作为点击量插入到名为click的内容中。

如果用户名已存在,我希望它在现有点击值中添加一个。我试图让它不区分大小写。但是,它似乎不起作用!

  $query = mysql_query("SELECT * FROM clicks WHERE username='$ytusernamecheck'");

  $numrows = mysql_num_rows($query);

  if ($numrows < 0)  
  {
      mysql_query("INSERT INTO clicks (username, clicks)
                                      VALUES ('$ytusernamecheck', 1)");
      echo $numrows;

  }
  else{}

3 个答案:

答案 0 :(得分:1)

这一行有两个错误:

if ($numrows = '')  
  1. 您正在分配(=),而不是比较值(=====)。

  2. mysql_num_rows()返回一个整数,而不是空字符串。

  3. 您的最终结果应如下所示:

    if ($numrows === 0)  
    

    仅供参考,you shouldn't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

您应该做的是在username上创建一个唯一索引,而是使用this;

-- first do: CREATE UNIQUE INDEX ix_clicks ON clicks(username);

INSERT INTO clicks VALUES ('username', 1)
  ON DUPLICATE KEY UPDATE clicks = clicks + 1;

它将在一次操作中执行插入/更新,而无需对数据库进行额外查询。

An SQLfiddle to test with

答案 2 :(得分:0)

为什么不在用户名字段中设置唯一键并改为使用

mysql_query("INSERT INTO clicks (username, clicks) VALUES ('$ytusernamecheck', 1) 
on duplicate key update clicks=clicks+1");

只有一条SQL语句以这种方式执行