这是我遇到问题的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语句也没有输出,不正确的idcard显示“抱歉,找不到客户端”。但是,如果我在输入现有的idcard时删除if语句,则数据显示正常。
请告诉我代码有什么问题吗?
由于
答案 0 :(得分:3)
使用mysqli_num_rows
计算结果:
if(mysqli_num_rows($result) == 0) echo "Sorry, no clients found";
答案 1 :(得分:2)
mysqli_fetch_array()
从数据库中提取项目。
这意味着您的if()
代码会从数据库中获取第一个项目。
然后,当您从mysqli_fetch_array()
条件再次呼叫while()
时,已经提取了第一个项目,并且您正在尝试获取第二个项目;哪个不存在。
您必须确保使用mysqli_fetch_array()
的结果,而不是一次只用调用它;或者,作为替代方案,您可以使用mysqli_num_rows()
函数(引用):
返回结果集中的行数。
答案 2 :(得分:2)
$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 />";
}
}
试试这个。
已编辑:已添加结束括号。
答案 3 :(得分:0)
使用mysqli_num_rows()
来测试是否有任何返回。
答案 4 :(得分:-1)
想象一下,你把一些钱放在口袋里
最终你想到了一个想法,看看你是否还有钱
你把它拿出来计算它们。好的。
还在手拿着你决定从口袋里拿走它们。哎呀!口袋是空的!
那是你的问题。
要查看数据库中是否有任何行,您可以使用mysqli_num_rows()
。它将返回账单数量,而不从口袋中取出。
答案 5 :(得分:-1)
问题是,您尝试使用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注入攻击。