如何解决Num行错误

时间:2018-12-05 13:50:51

标签: php html mysql

你好,我正在用php和mysql编写用户登录页面。由于某种原因,我收到以下错误。

  

警告:mysqli_num_rows()期望参数1为mysqli_result,在第35行数据库查询的G:\ USW Year 2 \ xampp \ htdocs \ userlogin.php中给出的布尔值失败。

function find_user_by_username($username){
  global $db;
  $sql = "SELECT * FROM user ";
  $sql .= "WHERE username='" . $username . "' ";
  $sql .= "LIMIT 1";
  $result = mysqli_query($db, $sql);
  $rowCount = mysqli_num_rows($result);


  //Confirm the result Set
  if (!$result){
    exit("database query failed.");
  }else{
    echo "Result found\n ";
  }

知道我在做什么错吗?

3 个答案:

答案 0 :(得分:0)

您的查询结果似乎为空| false,尝试在函数中传递$ db而不是使其全局化?

function find_user_by_username($db,$username){

  $sql = "SELECT * FROM user ";
  $sql .= "WHERE username='" . $username . "' ";
  $sql .= "LIMIT 1";
  $result = mysqli_query($db, $sql);
  $rowCount = mysqli_num_rows($result);


  //Confirm the result Set
  if (!$result){
    exit("database query failed.");
  }else{
    echo "Result found rows $rowCount\n ";
  }
}

答案 1 :(得分:0)

显然,mysqli_query()返回false,只有$ return不为false时才应执行它, 尝试将其移至if

//Confirm the result set
  if (!$result){
    exit("database query failed.");
  }else{   
    $rowCount = mysqli_num_rows($result);
    echo "Result found\n ";
  }

另外,就像ashfaq-ahmed所说的那样,如果不定义全局变量,那会更好

答案 2 :(得分:0)

查询失败时,mysqli_query()将返回false。因此,您应在致电mysqli_num_rows()之前检查一下。

您可以通过如下方式将呼叫移至else块中来实现:

if (!$result){
  exit("database query failed.");
}else{
  $rowCount = mysqli_num_rows($result);
  echo $rowCount . " result(s) found\n ";
}

关于解决查询失败的原因,您可能想要尝试输出$sql的值并将输出粘贴到数据库客户端中,这将给您带来更好的错误消息。您可能还需要输出$db,以确保它从全局范围继承了正确的值。

旁注:在实践中通常不建议使用global命令。另外,在mysqli_*函数上,建议将PDO用于SQL集成。