db2_prepare (): ошибка подготовки инструкции при привязке параметра

Я пытаюсь подготовить оператор для табличной функции в DB2 на iSeries, но получаю предупреждение db2_prepare (). Когда я вставляю значение параметра непосредственно в оператор SQL, он работает нормально.

Вот что я пытаюсь подготовить:

$sql = 'SELECT U8.VALIDUSER(?) '
. 'FROM SYSIBM.SYSDUMMY1';
$stmt = db2_prepare($this->conn, $sql);
db2_bind_param($stmt, 1, 'userID', DB2_PARAM_IN);

PHP возвращает: Warning: db2_prepare(): Statement Prepare Failed in... для строки db2_prepare ().

Если я изменю это на это, это работает:

$sql = 'SELECT U8.VALIDUSER(\'' . $userID . '\') '
. 'FROM SYSIBM.SYSDUMMY1';
$stmt = db2_prepare($this->conn, $sql);

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

Я что-то упускаю?

1

Решение

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

Я не уверен, есть ли в PHP опция, но в C # вы можете передать тип при определении параметра, так что это может быть опция, если она доступна, вместо жесткого кодирования типа в SQL.

Проверьте это другой ответ у меня есть о том, как извлекать «нативные» ошибки DB2, которые, вероятно, гораздо более полезны, чем те, которые выдает PHP. у меня тоже есть другой ответ о SQL0418N, что, вероятно, является реальной ошибкой, которую вы получили бы, если бы смотрели на собственную ошибку.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector