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
方法存在-当然可以在本地环境中进行实验。感谢您提供的信息