即使数据库为空,mySQL也会返回结果

时间:2015-01-24 21:32:28

标签: php mysql

此SQL查询返回结果,然后会话保存空变量,如$_SESSION["fbid"] = $user->fbid;,数组将为Array ( [fbid] => )

   $result = $mysqli->query("SELECT * FROM `users` WHERE `fbid` = '$fbid'") or die(mysqli_error());
   if ($result) {
   $user = $result->fetch_object();
        ...

主要问题是,当数据库中没有任何记录时,为什么要通过if ($result)

4 个答案:

答案 0 :(得分:1)

您说if($result)

这说明你的if总是如此。

例如,您需要说if($result == 1)

你需要让$ result等于或等于。

这就是if语句的工作原理。但是,你说“如果查询”无论如何都无法工作,你需要说出像

这样的内容
if(mysqli_num_rows($result) > 0){
    $user = $result->fetch_object();
}           

答案 1 :(得分:1)

mysqli->query会返回 true false mysqli_result对象。

真实mysqli_result对象都将通过if($result),并在错误情况中返回false。获得空结果不是错误。

如果您需要检查查询是否返回空结果,请使用$num_rows属性,例如。

答案 2 :(得分:1)

如果if ($result)失败,您的测试mysqli_query()将失败,可能是语法错误。

如果您有有效的查询,您的测试将通过。即使您的有效查询返回空集(确实没有找到 有效结果),也是如此。

您需要检查查询结果以确保查询实际成功,但这与检查它是否返回任何内容不同。

尝试

$result = $mysqli->query("select...");
if ($result->num_rows) {
   // do stuff
}

答案 3 :(得分:0)

如果查询失败,

mysqli::query会返回FALSE。在这种情况下,它没有失败 - 它已成功执行,并返回零行。

如果要检查空结果集,请检查fetch_object的返回值:

$user = $result->fetch_object();
if ($user) {
   # do stuff...