db2_fetch_object(): ошибка выборки возникает, когда запрос работает в strsql

Я получаю следующую ошибку при выполнении запроса в PHP:

Предупреждение: db2_fetch_object(): ошибка выборки в... в строке 15

Странно то, что когда я запускаю тот же запрос в своем терминале I5, используя strsql, он работает, и я получаю хороший набор записей. Я выполнил запрос SELECT * FROM TABLE(U8.feedconst(0)) AS t1.

U8.feedconst(0) — это табличная функция, которая находится в библиотеке U8, но извлекает данные из пользовательской библиотеки. Когда я использую терминал IBM, я устанавливаю пользовательскую библиотеку с помощью uasetlibl. Библиотека указана в соединении PHP DB2 в $this->user->library (эта библиотека успешно используется в других запросах).

Вот PHP-код:

$this->conn = db2_connect(
        \HOST, 
        $this->user->username, 
        $this->user->password,
        array('i5_libl' => $this->user->library . ' ' . \PROD_LIB,
            'i5_naming' => DB2_I5_NAMING_ON)
);
$sql = 'SELECT * FROM TABLE(U8.feedconst(0)) AS t1';
$stmt = db2_prepare($this->conn, $sql);
if ($stmt) {
    $this->user->log('stmt = ' . strval($stmt), true);
    $exec = db2_execute($stmt);
    if ($exec) {
        $this->user->log('exec = ' . strval($exec), true);
        $this->user->log('db2_stmt_errormsg = ' . db2_stmt_errormsg($stmt), true);
        while ($row = db2_fetch_object($stmt)) {
            $this->user->log($sql, true);
        }
    }
}

Лог показывает, что все выглядит хорошо до строки db2_fetch_object():

2015-11-18 10:43:53pm : stmt = Resource id #21
2015-11-18 10:43:53pm : exec = 1
2015-11-18 10:54:27pm : db2_stmt_errormsg = 

Как видите, я пытался получить настоящую ошибку от DB2, используя db2_stmt_errormsg(), но ничего не возвращает.

Я просмотрел другие подобные вопросы, такие как Предупреждение: db2_fetch_assoc(): ошибка выборки и ошибка сбоя выборки DB2, но они, похоже, не решают мою ситуацию.


person Kelly Keller-Heikkila    schedule 18.11.2015    source источник


Ответы (1)


Я нашел причину своего горя. Кажется, была дополнительная библиотека, которая использовалась внутри табличной функцией. Поскольку у этой табличной функции была зависимость в другой библиотеке, а эта другая библиотека не была включена в мой список библиотек, набор записей, возвращаемый в PHP, был пуст.

Это работало в терминале i5, потому что мой сеанс терминала уже был настроен на включение этой другой библиотеки в список библиотек, без моего ведома.

Когда я добавил другую внутреннюю библиотеку в свой список библиотек в соединении, запрос работал в PHP просто отлично.

Если кто-то еще столкнется с этим, убедитесь, что вы включили все библиотеки, используемые вашим запросом, включая любые, которые могут быть внутренними зависимостями.

person Kelly Keller-Heikkila    schedule 19.11.2015