当我运行我的PHP代码时,它会给我以下错误:
Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given
造成这种情况的原因是什么?
以下是执行查询的代码:
class accounts {
public function check_login($a,$b)
{
$conn = mysqli_connect("localhost", "username", "pw", "dbname");
$result = mysqli_query($conn, "select * from members WHERE username='$a' and password='$b'");
if (mysqli_num_rows($result) == 0) {
$arr = array("message" => "fail");
} else {
$row=mysqli_fetch_assoc($result);
$arr=array("message"=>"success");
}
return $arr;
}
}
?>
以下是调用该函数的代码:
if (isset($_POST['Login'])){
$ra=$obj->check_login($_POST['myusername'],$_POST['mypassword']);
if ($ra['message']=="success") {
$_SESSION['x']=$ra['myusername'];
$_SESSION['y']=$ra['mypassword'];
header("location:index.php");
} else {
echo "<center><font color='red'><b>Wrong Username or Password</center></font></b>";
非常感谢任何帮助。
答案 0 :(得分:0)
mysqli_num_rows
功能仅在您拥有有效结果集时才有效。因为它告诉你你已经传递了一个布尔值,这意味着$result
变量中的内容必定存在问题。
mysqli_query
将返回false
。我已经阅读了你的查询,你似乎没有任何重大的语法错误,所以问题可能在于其中一个列或表名的拼写。
要查看问题所在,请更改
$result = mysqli_query($conn, "select * from members WHERE username='$a' and password='$b'");
到
$result = mysqli_query($conn, "select * from members WHERE username='$a' and password='$b'") or die(mysqli_error($conn));
这将在页面上回显MySQL错误,以便您可以调试查询。
一旦您将查询调整为正确,您将不会再出现此错误。
您需要清理您在查询中输入的任何输入,否则您会对自己的主要安全漏洞开放。阅读有关SQL注入的更多信息以及您可以采取的措施:http://php.net/manual/en/security.database.sql-injection.php