2015-11-18 6 views
0

Я получаю следующее сообщение об ошибке при выполнении запроса в PHP:db2_fetch_object(): Fetch Failure брошенного когда запрос работает в strsql

Предупреждение: db2_fetch_object(): Fetch Failure в ... на линии 15

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

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

Вот 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(), но ничего не возвращает.

Я смотрел другие подобные вопросы, такие как Warning: db2_fetch_assoc(): Fetch Failure и DB2 fetch failure error, но они, похоже, не затрагивают мою ситуацию.

ответ

0

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

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

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

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