php - 使用 php 从 Debian 容器到 IBMi 服务器调用 db2 存储过程时无法获取下一个结果集
问题描述
我正在尝试使用 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();
}
解决方案
推荐阅读
- ebay-api - eBay API:getMostWatchedItems 返回 RequestError
- javascript - OctoberCMS Javascript API AJAX 调用组件函数以更新组件的部分
- python - 如何使用 pyparsing 定义句子的语法
- pyspark - 从 .egg 而不是 .py 运行 PySpark 作业
- fastlane - 无法使用 Ruby 测试 Fastlane 中的目录是否已存在
- jquery - jQuery -$ 未定义
- javascript - 如何在 flex-container 的 div 中保持范围滑块
- ruby - HWND类型属于什么数据类型?
- ruby-on-rails - AJAX 在 Rails 同页更新中不起作用
- mips - 如何在 MIPS 中将数组偏移 n * row + col?