我正在尝试使用 php(ibm_db2 v2.0.2 扩展)从我的 Debian 容器到 IBMi 服务器调用 db2 存储过程。
我已经在 Debian 容器 (docker) 上安装了 ibm_db2 (v2.0.2) php 扩展来请求通过 TCP/IP 协议托管在 IBMi 服务器上的 db2 数据库,它工作得很好,我可以正确地进行查询。
当我尝试调用具有多个结果集的存储过程时,我的问题就出现了。当我调用存储过程时,我可以使用 db2_fetch_assoc 函数获取第一个结果集,但无法使用 db2_next_result 函数获取下一个结果集。没有抛出错误,db2_fetch_assoc 只是为下一个结果集返回 false,就好像没有后续集一样。
调用这些存储过程的应用程序部署在 IBMi 上的 ZendServer 上,一切正常。问题出现在我的“docker”环境中。我尝试了很多事情,比如更改 ibm_db2 扩展的版本、尝试另一个 ODBC 驱动程序版本、更改 php 配置,但我无法让它工作。
奇怪的是,当我从 docker 使用 db2 cli 运行存储过程时,我能够正确获取所有结果集。它只是不适用于php。
过来帮忙。有人遇到同样的问题吗?
非常感谢,
编辑 03/18/2020
来自 db2_client_info php 函数的驱动程序信息
这是我检索结果集的代码:
while ($row = db2_fetch_assoc($statement)) {
print_r($row);
}
while ($row = db2_fetch_assoc(db2_next_result($statement))) {
print_r($row);
}
while ($row = db2_fetch_assoc(db2_next_result($statement))) {
print_r($row);
}
编辑 03/18/2020 10:50
php版本是7.1
现在的代码如下所示:
try {
db2_execute($statement);
while ($row = db2_fetch_assoc($statement)) {
print_r($row);
}
$nextResults = db2_next_result($statement);
while ($row = db2_fetch_assoc($nextResults)) {
print_r($row);
}
$nextResults = db2_next_result($statement);
while ($row = db2_fetch_assoc($nextResults)) {
print_r($row);
}
} catch (\Exception $e) {
echo $e->getMessage();
}