mysqli_num_rows()需要参数1

时间:2017-05-10 19:26:27

标签: php mysql mysql-num-rows

当我运行我的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>";

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题

mysqli_num_rows功能仅在您拥有有效结果集时才有效。因为它告诉你你已经传递了一个布尔值,这意味着$result变量中的内容必定存在问题。

如果您的SQL查询中存在错误,

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注入

您需要清理您在查询中输入的任何输入,否则您会对自己的主要安全漏洞开放。阅读有关SQL注入的更多信息以及您可以采取的措施:http://php.net/manual/en/security.database.sql-injection.php