PHP db2_fetch_assoc& db2_fetch_both

时间:2011-10-05 19:48:50

标签: php db2

我已成功连接到数据库,并成功提取数据并使用db2_fetch_array和db2_fetch_both显示它。下面的代码工作得很好

$file="m03slsd0";
$file=db2_escape_string($file);
$query="SELECT slgrpn,slfrkn,slftyp,slfsze,slpqty,slpwht,slentp,slkplt FROM HUTALIB.$file";
$quepre=db2_prepare($conn,$query);
$quexe=db2_execute($quepre);

while($row=db2_fetch_both($quepre))
{
$det=$row[0];
if($det!='')
{
printf($det."</br>");
}
}

当我在db2_fetch_assoc()或db2_fetch_array()中将索引更改为列名时出现问题 - 下面的代码不打印任何内容。

while($row=db2_fetch_both($quepre))
{
$det=$row['slgrpn'];
if($det!='')
{
printf($det."</br>");
}
}

有什么建议吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

  

数组([SLGRPN] =&gt; 12626 ......

数组键区分大小写,您需要使用

$det=$row['SLGRPN'];

不确定为什么字段名称变成大写 - 这可能是db2的特征。

答案 1 :(得分:1)

缺省情况下,DB2标识符不区分大小写,并且将使用/返回大写字段名称,除非您的列在双引号内定义(同样适用于表名):

CREATE TABLE foo ( bar integer, "baz" integer );

查询此表:

SELECT bar, "baz" FROM foo;
PHP中的

...会返回类似的内容:

Array (
    [BAR] => something
    [baz] => something   
)

所以你必须这样做:

echo $array['BAR'];
echo $array['baz'];

要消除任何歧义,您可以更改查询:

SELECT BAR FROM FOO;

...或用双引号定义所有字段和表名:

SELECT "bar", "baz" FROM "foo"