未找到记录时,mysqli_query 不返回 false [重复]

Posted

技术标签:

【中文标题】未找到记录时,mysqli_query 不返回 false [重复]【英文标题】:mysqli_query doesn't return false when no record was found [duplicate] 【发布时间】:2014-07-04 10:28:18 【问题描述】:

如果我运行此代码,即使表 myTable 中的数据库 myDB 中不存在数据记录,if 子句也不会返回 false。不知道怎么回事。。

// mysqli-Connection...

$result = $mysqli->query("SELECT * FROM `myDB`.`myTable` WHERE `itemtype` = 'comment' AND `itemID` = 3");
if ($result) 
echo "record found!";
 else 
echo "record not found!";

itemID = 3 的记录不存在,但我的 if 子句说 $result 返回 true..

【问题讨论】:

print_r($result) 然后尝试 if (!empty($result)) Returns FALSE on failure. (php.net/manual/de/mysqli.query.php) 空数据集不是失败的查询 【参考方案1】:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries
mysqli_query() will return a mysqli_result object. For other successful queries 
mysqli_query() will return TRUE. 

#Reference PHP Manual

您可以使用

$result = $mysqli->query("YOUR QUERY")); 
if($result->num_rows)
 // Records Found
else
 // Empty Result

【讨论】:

$result->num_rows 是我的问题的最佳解决方案(我正在使用多个数据集)谢谢!【参考方案2】:

在这里使用mysqli_num_rows 非常合乎逻辑:

$result = $mysqli->query("SELECT * FROM `myDB`.`myTable` WHERE `itemtype` = 'comment' AND `itemID` = 3");
if($result->num_rows > 0) 
    echo 'record found';
 else 
    echo 'query is ok but no results found';

您不能在 if 中放置 mysqli_result 对象,因为即使它产生 0 行,它仍会评估为 TRUE。

【讨论】:

【参考方案3】:

您的 PHP if 语句将评估为 TRUE,因为空的 mysql 结果集并不意味着它是一个失败的查询。查询运行正常,mysql 检索到 0 行,因此 $result 评估为 true。

要检查是否已检索到有效行,请尝试:

if ( ! empty($result) )  
  echo "record found!";
 else 
  echo "record not found!";

【讨论】:

以上是关于未找到记录时,mysqli_query 不返回 false [重复]的主要内容,如果未能解决你的问题,请参考以下文章

未找到匹配记录时返回 NULL

当要求更新未找到或未更新的记录时,应该将http返回给客户端的内容是什么?

mysqli_query 上的未定义变量

mysqli_query 返回 0 行(奇怪的行为)

当没有找到记录并且失败时,PHP PDO fetch 返回 FALSE

服务门户小部件表单返回“未找到记录”