我有两个不同的功能:
function user_count(){
global $db;
$query = mysqli_query($db,"SELECT COUNT(user_id) FROM users");
if($result = $query){
$user_count = mysqli_num_rows($result);
mysqli_free_result($result);
return $user_count;
}
}
在这个函数中,我查询数据库告诉我有多少用户,在PHP中我使用user_count()。这个函数的结果是1.哪个是正确的,因为我目前在数据库中只有1个用户。 但是当我对不同的函数使用相同的代码时,例如:
function user_exists($username){
global $db;
sanitize($username);
$query = mysqli_query($db,"SELECT COUNT(user_id) FROM users WHERE username=".$username) or die ("Doesn't work");
if($result = $query){
$user_exists = mysqli_num_rows($result);
mysqli_free_result($result);
return $user_exists;
}
}
更不用说我也试图注释掉sanitize($ username)。但即使它被注释掉,我仍然会收到错误。
我使用函数user_exists(“superadmin”),我收到错误“不工作”。我想知道我在第二个函数中做错了什么,第一个函数会返回行数,而第二个函数会返回错误。
我确实知道:
如果您使用程序样式回复,我将非常感激。
答案 0 :(得分:1)
用一个聪明人的话来说,“这不是你要找的伯爵”
mysqli_num_rows
将返回结果集中的行数,在这种情况下,它将始终为1.
要获得实际点数,您必须使用$row=mysqli_fetch_row($result)
,然后您想要的点数在$row[0]
;
此外,您没有正确创建查询 - 查询应该在变量周围有单引号。更好的是,看看使用准备好的陈述,因为他们会照顾你所有的逃避和报价
答案 1 :(得分:0)
您要求表用户中的user_ids数量,因此MySQL服务器将返回如下内容:
mysql> SELECT COUNT(user_id) FROM users;
+----------+
| count(*) |
+----------+
| 36 |
+----------+
1 row in set (0.00 sec)
然后,您正在使用mysqli_num_rows
检查查询结果以查看返回的行数。但是,正如您所看到的那样,“设置中有1行” - 因此您将在查询结果中找回行的行数,不的数量user_ids。
你想要做的是这样的事情:
$row = mysqli_fetch_row($result);
$num_user_ids = $row[0];
因为$ row [0]包含行中的第一个字段,在我的示例中为36。
关于第二部分,你需要bind parameters,如下所示:
$stmt = $mysqli->prepare("SELECT COUNT(user_id) FROM users WHERE username = ?");
$stmt->bind_param('s', $username);
这意味着你要更换?在上面的第一行中有一个字符串,在第二个参数中给出。
你也可以做你做的事情,但是你必须用单引号括住$username
,因为查询不会为你做。
答案 2 :(得分:0)
您只在第一个函数中从mysqli_num_rows
获取一行,因为结果集中只有一行(其中包含COUNT
值的行)。如果要获取实际读取结果集所需的值。或者,您无法在第一种情况下使用COUNT
函数,然后使用mysqli_num_rows
。
在第二个函数中,我的猜测是你需要在你要搜索的用户名值周围添加单引号。您应该查看从查询返回的实际错误,并从中开始工作。