PHP新手与一段令人困惑的代码

时间:2011-10-26 03:10:27

标签: php mysql

这应该很简单,但它似乎对我不起作用。我用密码好坏测试过它。无论如何,它都不会进入else语句。我不确定我错过了什么

我的代码:

$mysqli = mysqli_connect("localhost", "joeuser", "somepass", "testDB");

 if (mysqli_connect_errno()) {
      printf("Connect failed: %s\n", mysqli_connect_error());
      exit();
  } else {
      $sql = "SELECT * FROM login_info";      
      $res = mysqli_query($mysqli, $sql);

  if ($res) {
      while ($newArray = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
          $id  = $newArray['first_name'];                          
          $testField = $newArray['last_name'];                      
          echo "The ID is ".$id." and the text is ".$testField."<br/>";
         }
  } else {
      printf("Could not retrieve records: %s\n", mysqli_error($mysqli));
  }

        mysqli_free_result($res);
        mysqli_close($mysqli);
  }

如果我发送一个确实存在的用户和密码,那么if语句就可以了,但是如果我发送一个不在db中的测试,它仍然不会执行其他操作吗?为什么呢?

2 个答案:

答案 0 :(得分:3)

  

对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询mysqli_query()将返回MySQLi_Result个对象。

如果发生严重错误,查询只有成功。仅仅因为SELECT查询与任何行都不匹配不会导致查询失败。你仍然会得到一个MySQLi_Result对象。您需要查看mysqli_num_rows结果集是否包含任何行。

顺便说一句,给自己省一些筑巢:

if (!$something) {
    exit;
}

// continue as usual

此处无需else,因为您无论如何exit。使事情变得更简单。

答案 1 :(得分:0)

像这样:

if ($res) {
      while ($newArray = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
          $id  = $newArray['first_name'];                          
          $testField = $newArray['last_name'];                      
          echo "The ID is ".$id." and the text is ".$testField."<br/>";
         }
}

if (!isset($id)) {
      printf("Could not retrieve records: %s\n", mysqli_error($mysqli));
}