我在下面有一个简单的功能来检查用户是否已在我的网站上注册。如果他们是,那么它不会添加它们,如果他们不添加它们。但是在我的数据库中由于一些奇怪的原因,某个用户被添加了多次具有完全相同的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);
}
答案 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
这将添加您想要的行或一次更改现有行中的用户名。如果其他一些用户试图同时做同样的事情,这将安全地做到。