这应该很简单,但它似乎对我不起作用。我用密码好坏测试过它。无论如何,它都不会进入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中的测试,它仍然不会执行其他操作吗?为什么呢?
答案 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));
}