我有从我们的大型机导入的数据,并且表中的最后一列有空值。 (varchar,允许空值检查.obv。)字段名称全部为大写(大型机数据转储的结果......这是一个重要的线索)。当我尝试检索并回显该字段中的数据时,我得到一个" UNDEFINED INDEX"如果字段值为Null则出错。如果该字段有数据,我很好。
HOWEVER:如果我将字段重命名为开头的小写字母,它可以正常工作,无效或无效。
注意:如果我在字段的开头添加一个数字,它也不起作用。
试图找到一种解决方法,因为我正在处理大量的表,这些表几乎每天都会从这些大型机提取中被转储和重新创建,而不是必须更改字段名。任何帮助都会非常感激!
编辑:我试图使用" isset"但是你不能在$XXX->fields('fieldname')
代码行上检查isset。使用if(!($XXX->fields('fieldname'))
尝试也不起作用。
答案 0 :(得分:0)
如果您无法使用isset()
,则可以使用三个等号(identical operator)来比较它是否完全 NULL:
if ( $XXX->fields('fieldname') === NULL ) {
// NULL value, do something else...
} else {
// Not NULL, try something...
}
然而,这并不能解决您未定义的索引问题。你写过产生->fields('fieldname')
的班级了吗?如果是,或者即使不是,您可以修改类函数fields()
以检查isset()
,如果未设置则返回NULL,如果设置则返回值。
根据评论中的代码,您可以尝试替换:
return $this->fields[$this->bind[strtoupper($colname)]];
使用:
return ( isset( $this->fields[$this->bind[strtoupper($colname)]] ) ? $this->fields[$this->bind[strtoupper($colname)]] : NULL );
检查是否设置了$this->fields[ ... ]
,如果是,则返回它,否则返回null。
但是,如果这不起作用,请尝试将其替换为:
return ( isset( $this->bind[strtoupper($colname)] ) ? $this->fields[$this->bind[strtoupper($colname)]] : NULL );
检查是否设置了$this->bind[ ... ]
,如果是,则返回它,否则返回null。