未找到记录时,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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当要求更新未找到或未更新的记录时,应该将http返回给客户端的内容是什么?