尝试获取非对象的属性仅在页面的一部分上起作用,而在另一部分上则不起作用

问题描述

我正在使用准备好的语句(从PHPmyadmin中进行测试)使用特定值等从MysqL数据库中检索一行。

我使用Object.defineproperty()页面的第400行和第900行再次显示它(这是实际的复制粘贴)。第一个实例显示预期的结果,第二个实例引发错误

function partition(array,filter) {
  let pass = [],fail = [];
  array.forEach((e,idx,arr) => (filter(e,arr) ? pass : fail).push(e));
  return [pass,fail];
}

function unDefineProperties(obj,propertyDescriptors) {
  const [normalDescriptors,tobedeletedDescriptors] =
    partition(Object.entries(propertyDescriptors),([_,descriptor]) => descriptor);
  Object.defineProperties(obj,Object.fromEntries(normalDescriptors));
  tobedeletedDescriptors.forEach(([name,_]) => delete obj[name]);
  return obj;
}

// Usage example:

const obj = { a: 'A',b: 'B',c: 'C'};

unDefineProperties(obj,{
  a: null,c: null,d: { value: "D",enumerable: true }
});

console.log(obj); // logs { "b": "B","d": "D" }

那怎么可能?我已经检查过,<?PHP echo (htmlspecialchars($row_Feed->f_text)); ?>变量在两者之间的其他地方没有被重用,并且在同一文件的前两行中可以正常工作。唯一的事情是,第一个实例在此循环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()){}而另一个在关闭之后,但是从什么时候开始有影响?

对查询结果进行while循环的基本原理是,fetch调用将在没有更多记录要处理时返回NULL,这就是使循环在此时终止的原因然后。因此,当然,在循环之后,$row_feed为NULL。

如何重用$ row_feed的最后一个值

将其存储到另一个变量 inside 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);