我有这段代码:
$sql=mysqli_query($con,"SELECT username, password, email FROM users WHERE username=$username");
if(mysqli_num_rows($sql)>=1)
{
echo "<div class='form'>
<h3>Username already in use.</h3></div>";
}
使用此代码时,它会返回以下警告:
警告:mysqli_num_rows()期望参数1为mysqli_result, 布尔值在...中给出。
为什么会显示此警告以及如何解决?
答案 0 :(得分:1)
运行查询的方式是错误的。它很容易出错,总会给你这样的错误。而且,它也容易出现SQL注入。
当你直接在查询中添加一个变量时,它的内容可能会干扰,从而导致很多麻烦,从这样的错误到SQL注入。要彻底消除此类错误,您必须首先准备查询,添加问号代替变量,然后单独发送。这样它永远不会干涉。
您必须先准备好查询,然后绑定变量,然后执行:
$sql = "SELECT username, password, email FROM users WHERE username=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("s", $username);
$stmt->execute();
$res = $stmt->get_result();
if($res->num_rows())
{
echo "<div class='form'>
<h3>Username already in use.</h3></div>";
}
答案 1 :(得分:-1)
如果查看the documentation for the mysqli_query
method,您会在查询失败时看到该方法返回False
。这就是你的例子中发生的事情。然后,您将该布尔值传递给mysqli_num_rows
,这解释了错误消息。
要解决此问题,您需要进行一些错误检查。至少,在转到代码的其余部分之前,请检查mysqli_query
是否返回False
。
如果您正在做的不仅仅是在本地机器上进行实验,那么最好按照您的常识在他的答案中建议,并使用准备好的陈述。