数据库中的空值使用PHP和MSSQL导致未定义的索引

时间:2014-01-28 21:55:06

标签: php sql-server

我有从我们的大型机导入的数据,并且表中的最后一列有空值。 (varchar,允许空值检查.obv。)字段名称全部为大写(大型机数据转储的结果......这是一个重要的线索)。当我尝试检索并回显该字段中的数据时,我得到一个" UNDEFINED INDEX"如果字段值为Null则出错。如果该字段有数据,我很好。

HOWEVER:如果我将字段重命名为开头的小写字母,它可以正常工作,无效或无效。

注意:如果我在字段的开头添加一个数字,它也不起作用。

试图找到一种解决方法,因为我正在处理大量的表,这些表几乎每天都会从这些大型机提取中被转储和重新创建,而不是必须更改字段名。任何帮助都会非常感激!

编辑:我试图使用" isset"但是你不能在$XXX->fields('fieldname')代码行上检查isset。使用if(!($XXX->fields('fieldname'))尝试也不起作用。

1 个答案:

答案 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。