我正在使用准备好的语句从 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);
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消