Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的SELECT查询失败,如何修复?_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 我的SELECT查询失败,如何修复?

Php 我的SELECT查询失败,如何修复?,php,mysql,sql,mysqli,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>

我有以下代码:

$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>";
    }
$sql=mysqli_query($con,“选择用户名、密码、来自用户名=$username的用户的电子邮件”);
if(mysqli_num_rows($sql)>=1)
{
回声“
用户名已在使用。“;
}
使用此代码时,将返回以下警告:

警告:mysqli_num_rows()要求参数1为mysqli_结果, 布尔值在


为什么显示此警告以及如何修复它?

您运行查询的方式是错误的。它很容易出错,并且总是会给您带来这样的错误。此外,它还易于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>";
}
$sql=“选择用户名、密码、来自用户名=?”的用户的电子邮件”;
$stmt=$con->prepare($sql);
$stmt->bind_参数(“s”,$username);
$stmt->execute();
$res=$stmt->get_result();
如果($res->num_rows())
{
回声“
用户名已在使用。“;
}
如果查看,您将看到当查询失败时,该方法返回
False
。这就是您的示例中发生的情况。然后将该布尔值传递到
mysqli\u num\u行
,这解释了错误消息

要解决这个问题,您需要进行一些错误检查。至少,在继续处理代码的其余部分之前,检查
mysqli\u query
是否返回
False


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

不过,我真的很困惑,为什么在本地机器上进行实验时要编写容易出错的查询。
mysqli\u query
方法存在-当然可以在本地环境中进行实验。感谢您提供的信息