我正在使用準備好的語句從 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條經驗 獲得超8個贊
唯一的問題是,第一個實例位于此循環 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 關注
- 167 瀏覽
添加回答
舉報
0/150
提交
取消