这是我遇到问题的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注入攻击。