可以得到$ conn->查询(...)的结果为0并不为0

时间:2017-07-24 09:07:13

标签: php mysql mysqli

我在一些我必须处理的旧PHP代码中遇到了以下内容。我的问题是,是否需要那些Ifs?换句话说,如果返回结果,它必须返回大于零的记录,对吧?相反 - 意思是如果$ result是False,我可以假设没有找到记录吗?

$sql = "SELECT * FROM houses WHERE ownerphone=$pn";
$result = $conn->query($sql);
if ($result) {
    $count = $result->num_rows;
    if ($count > 0){
       ....Stuff happens here...
    } else {
        ...What happens here?...
    }
} else {
     ...Other Stuff happens here
}

3 个答案:

答案 0 :(得分:2)

是的,两者都是必需的。

  

如果返回结果,它必须返回大于零的记录,对吗?

错误。

如果你没有得到结果,那么你得到一个错误,你将没有一个对象来读取结果的数量。

可以从成功的请求中获得零行。

  

如果$ result为False,我可以假设没有找到记录吗?

嗯,是的。有点。这就是if语句停止检查结果是否为False时是否存在多行的原因。

...但是没有返回行,因为有一个错误与不返回行有所不同,因为找不到行。

答案 1 :(得分:1)

不,你不能假设这一点。如果尝试执行查询时出现错误,则$conn->query()会返回false。与任何行匹配的SELECT查询不是错误。

错误包括查询中的语法不正确或与数据库服务器通信时出现问题。

答案 2 :(得分:1)

来自docs;

  

失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或   EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于   其他成功的查询mysqli_query()将返回TRUE。

这意味着它将基本上永远不会返回null。第一次检查(if ( $result )只是为了确保一切顺利,你从数据库得到某种响应。第二项是计算你的行;得到一个结果并不意味着你的查询实际上返回数据,因为也许你正在寻找那些不存在的东西。