尝试获取非对象的属性适用于页面的一部分,但不适用于其他部分

我正在使用准备好的语句从 MySQL 数据库中检索一行,该语句在特定值等下运行良好(在 phpmyadmin 中测试)。


我经常<?php echo (htmlspecialchars($row_feed->f_text)); ?>在页面的第 400 行显示它,然后在第 900 行再次显示它(它是实际的复制粘贴)。第一个实例按预期显示结果,第二个实例抛出错误:


Uncaught Customizable_Exception: Trying to get property 'f_text' of non-object in C:\xampp\htdocs\bbto.eu\index.php:878

这怎么可能呢?我已经检查过,该$row_feed变量不会重复用于中间的其他内容,并且它在同一文件中的几行中工作正常。唯一的问题是第一个实例位于此循环内,while($row_feed = $feed->fetch_object()) {  }而另一个实例位于循环关闭后,但从什么时候开始有任何影响呢?


最小可重现示例:


$sql = "SELECT * FROM feed";

$statement = $mysqli->prepare($sql);

if(!$statement->execute()) { die("Query error: ".$statement->error); } 

$feed = $statement->get_result();


while ($row_feed = $feed->fetch_object()) {

echo (htmlspecialchars($row_feed->f_text));

}

### other stuff going on

echo (htmlspecialchars($row_feed->f_text));

我在第二次回显时收到错误。


神不在的星期二
浏览 121回答 1
1回答

慕仙森

唯一的问题是,第一个实例位于此循环 while($row_feed = $feed->fetch_object()) { } 内,而另一个实例位于循环关闭后,但从什么时候开始有任何影响呢?对查询结果执行这样的 while 循环的基本原理是,fetch当没有更多记录需要处理时,调用将返回 NULL,这就是使循环在此时终止的原因。所以当然在你的循环之后,$row_feed是NULL。如何重用 $row_feed 的最后一个值将其存储到while 循环内的另一个变量中$last_row = $row_feed;:这将在每次循环迭代中被覆盖,因此只有最后一个值会在循环后“生存”。由于它在循环内部$row_feed = $feed->fetch_object(),因此当结果为 NULL时,该行将不再执行。while ($row_feed = $feed->fetch_object()) {&nbsp; echo htmlspecialchars($row_feed->f_text);&nbsp; $last_row = $row_feed;}### other stuff going onecho htmlspecialchars($last_row);
打开App,查看更多内容
随时随地看视频慕课网APP