我的SELECT查询失败,我该如何解决?

时间:2018-03-13 19:05:24

标签: php mysql sql mysqli

我有这段代码:

$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,   布尔值在...中给出。

为什么会显示此警告以及如何解决?

2 个答案:

答案 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

如果您正在做的不仅仅是在本地机器上进行实验,那么最好按照您的常识在他的答案中建议,并使用准备好的陈述。