为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
神不在的星期二 2023-11-03 20:13:01
我正在使用准备好的语句从 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 onecho (htmlspecialchars($row_feed->f_text));我在第二次回显时收到错误。
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

唯一的问题是,第一个实例位于此循环 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()) {

  echo htmlspecialchars($row_feed->f_text);

  $last_row = $row_feed;

}

### other stuff going on

echo htmlspecialchars($last_row);


查看完整回答
反对 回复 2023-11-03
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信