当我输入if语句时,没有显示任何结果


no results shown when I enter the if statement

这是我遇到问题的PHP代码的一部分:

$query = "SELECT * FROM clients where idcard = '$idcard'";
$result = mysqli_query($dbc, $query)
  or die("Error quering database.");
if(mysqli_fetch_array($result) == False) echo "Sorry, no clients found";
while($row = mysqli_fetch_array($result)) {
   $list = $row['first_name'] . " " . $row['last_name'] . " " . $row['address'] . " " . $row['town'] . " " . $row['telephone'] . " " . $row['mobile'];
   echo "<br />";
   echo $list;
}

即使我插入了一个现有的idcard值,当有if语句时,我也不会得到输出,一个不正确的id卡会显示"对不起,没有找到客户端"。但是,如果我删除if语句,如果我输入现有的ID卡,数据显示正常。

你能告诉我代码出了什么问题吗?

感谢

使用mysqli_num_rows对结果进行计数:

if(mysqli_num_rows($result) == 0) echo "Sorry, no clients found";

mysqli_fetch_array()从数据库中获取一个项。

这意味着您的if()代码从数据库中获取第一个项目。

然后,当您从while()条件再次调用mysqli_fetch_array()时,第一项已经被提取,并且您正在尝试提取第二项;这是不存在的。


您必须确保使用mysqli_fetch_array()的结果,而不是一次性调用它,只调用而不调用;或者,您可以使用mysqli_num_rows()函数(引用)

返回结果集中的行数。

$query = "SELECT * FROM clients where idcard = '$idcard'";
$result = mysqli_query($dbc, $query)
  or die("Error quering database.");
if(mysqli_num_rows($result) == 0) {
    echo "Sorry, no clients found";
}else{
    while($row = mysqli_fetch_array($result)) {
       $list = $row['first_name'] . " " . $row['last_name'] . " " . $row['address'] . " " . $row['town'] . " " . $row['telephone'] . " " . $row['mobile'];
        echo $list . "<br />";
    }
}

试试这个。

编辑:添加了右括号。

使用mysqli_num_rows()测试是否返回了任何内容。

想象一下你在口袋里放了一些钱
最终,你想到了一个主意,看看你是否还有钱
你把它拿出来数数。好吧
你手里还拿着它们,决定把它们从口袋里拿出来。哎呀!口袋是空的!

这是你的问题。

要查看是否从数据库中获得任何行,可以使用mysqli_num_rows()。它会返回账单的数量,而不会从口袋里取出。

问题是,您试图使用mysqli_fetch_array来查询结果的数量。mysqli_fetch_array将获取第一个结果,将其与false进行比较,然后丢弃它。下一个mysqli_fetch_array将获取不存在的第二个结果。

如果你想检查是否找到任何客户端,你可以像这样使用mysqli_num_rows

$idcard = mysqli_escape_string($dbc, $idcard); // See below: Prevents SQL injection
$query = "SELECT * FROM clients where idcard = '$idcard'";
$result = mysqli_query($dbc, $query) or die("Error quering database.");
if(mysqli_num_rows($result) == 0) {
  echo "Sorry, no clients found";
} else {
  while($row = mysqli_fetch_array($result)) {
     // Do whatever you want
  }
}

如果$idcard是用户提供的值,请注意SQL注入攻击