php num_rows无效

时间:2014-11-14 22:10:52

标签: php mysql mysqli

我在下面有一个简单的功能来检查用户是否已在我的网站上注册。如果他们是,那么它不会添加它们,如果他们不添加它们。但是在我的数据库中由于一些奇怪的原因,某个用户被添加了多次具有完全相同的id。 mysqli_num_rows有什么问题吗?

  $check = mysqli_query($con, "SELECT id FROM users WHERE id='$id'");
    $row_cnt = mysqli_num_rows($check);
       if ($row_cnt == 0) { 
    $query = "INSERT INTO users (id,username) VALUES ('$id','$username')";
    mysqli_query($con, $query);
       } else {   // If Returned user . update the user record      
    $query = "UPDATE users SET username='$username' where id='$id'";
    mysqli_query($con, $query);
    }

1 个答案:

答案 0 :(得分:2)

这里有一些事情。

首先,num_rows()众所周知并不总是返回正确的值。如果您想知道有多少行匹配某些条件,请使用此查询然后读取单行结果集中的rowcount。

SELECT COUNT(*) AS rowcount FROM users WHERE id='$id'

其次,看起来你正在尝试进行条件插入/更新操作。在这种情况下,您最好使用INSERT ... ON DUPLICATE KEY UPDATE mySQL命令。这可以解决问题代码中的竞争条件。

你想要一个像这样的查询:

INSERT INTO users (id,username) VALUES ('$id','$username')
ON DUPLICATE KEY UPDATE username='$username';

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

这将添加您想要的行或一次更改现有行中的用户名。如果其他一些用户试图同时做同样的事情,这将安全地做到。