PHP 警告:“从中的空值创建默认对象。

PHP warning: "Creating default object from empty value in . . ."

提问人:Ken Emerson 提问时间:11/14/2023 最后编辑:mickmackusaKen Emerson 更新时间:11/14/2023 访问量:35

问:

我已经尝试了此处建议的解决方案,但警告仍然存在。这是产生问题的代码:

$qryResults = array();
$qryResults[$sqlidx]->numrows = 0;  [This is the line pointed to by the warning message]
$qryResults[$sqlidx]->numcols = odbc_num_fields($resultSets[$sqlidx]);

还有另一个对 $qryResults 数组的引用,它保存了数据库读取的结果:

$qryResults[$sqlidx]->fields[$qryResults[$sqlidx]->numrows][$j] = date('m/d/Y H:i:s',odbc_result($resultSets[$sqlidx], $j +      1));

首次使用数组时出现警告 (numrows=0) PHP 版本为 7.4.3,在 Ubuntu 20.04 上运行

$qryResults保存来自 MSSQL select 命令的多个查询。

出现的警告并不妨碍代码正常工作,但我对如何摆脱警告感到茫然。(我不喜欢松散的结局:-))

我最初没有数组分配,这导致了警告的第一次观察。
然后,我尝试将数组定义为“stdClass”,其结果为:

PHP 致命错误:未捕获错误:无法将 stdClass 类型的对象用作数组

这是我在谷歌搜索此警告时能够找到的两个选项。

php sql-server

评论

5赞 mickmackusa 11/14/2023
我不明白你的意图是什么。 是一个空数组。然后,您尝试在 处声明对象的属性,但该对象从未创建。我想您可以执行声明的中间步骤,但我不确定这是否只是提供 XY 问题。您是否想执行 [您的数据库处理],然后让该属性回退到从未填充过?$qryResults = array();numrows$qryResults[$sqlidx]$qryResults[$sqlidx] = (object) [];0

答:

0赞 almaruf 11/14/2023 #1

您的问题是:

$qryResults = array();
$qryResults[$sqlidx]->numrows = 0;

您正在尝试:

  1. 将变量初始化为空数组
  2. 然后尝试查找不存在的项并设置该不存在项的属性。numrows

这不是生产就绪的代码,但要澄清什么可以工作:

$qryResults = array();
$anItem = (object)array(
   'numrows' => 0,
   'numcols' => 'something_else',
);
$qryResults[$sqlidx] = $anItem;

$anItem = new stdClass();
$anItem->numrows = 0;
$anItem->numcols = 'something_else';

$sqlIdx = 0;
$qryResults = array();
$qryResults[$sqlidx] = $anItem;