Я пытаюсь вызвать хранимую процедуру db2, используя php (расширение ibm_db2 v2.0.2) из моего контейнера Debian на сервер IBMi.
Я установил расширение ibm_db2 (v2.0.2) php в контейнере Debian (docker) для запроса к базе данных db2, которая размещена на сервере IBMi по протоколу TCP / IP, и она прекрасно работает, и я могу правильно выполнять запросы.
Моя проблема возникает при попытке вызвать хранимую процедуру с несколькими наборами результатов. Когда я вызываю хранимую процедуру, я могу получить первый набор результатов с помощью функции db2_fetch_asso c, но я не могу получить следующие наборы результатов с помощью функции db2_next_result. Не выдается никакой ошибки, db2_fetch_asso c просто возвращает false для следующих наборов результатов, как если бы не было последующих наборов.
Приложение, вызывающее хранимую процедуру, развернуто на ZendServer в IBMi, и все работает отлично , Проблема возникает в моей среде "docker". Я пробовал много вещей, таких как изменение версии расширения ibm_db2, пробование другой версии драйвера ODB C, изменение конфигурации php, но я не могу заставить ее работать.
Странно то, что когда я запускаю хранимая процедура с db2 cli из моего docker, я могу правильно получить все свои результаты. Это просто не работает с php.
Приходите, чтобы получить некоторую помощь. Кто-то сталкивался с той же проблемой?
Большое спасибо,
РЕДАКТИРОВАТЬ 03/18 / 2020
Информация о драйверах из db2_client_info php function
Это мой код для получения моих наборов результатов:
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();
}