db2_prepare(): 绑定参数时语句准备失败

db2_prepare(): Statement Prepare Failed when binding parameter

我正在尝试为 iSeries 上的 DB2 上的 table 函数准备一个语句,但我收到 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 returns:Warning: db2_prepare(): Statement Prepare Failed in... 用于 db2_prepare() 行。

如果我把它改成这个,它就有效:

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

为什么绑定参数失败,直接插入就可以?我自然想绑定参数,这样我就不必为这种情况添加不必要的清理。

有什么我遗漏的吗?

如评论中所述,我猜测您的问题是DB2 在进行绑定时无法确定您的参数是什么类型。如果您在参数周围添加一个 CAST 来告诉 DB2 您传递的是什么类型,它应该可以工作。

我不确定 PHP 是否有选项,但在 C# 中,您可以在定义参数时传入类型,因此如果可用的话,这可能是一个选项,而不是 hard-在 SQL.

中编码类型

查看此 other answer I have about how to fetch the "native" DB2 errors, which are likely much more helpful than the ones thrown by PHP. I also have another answer about SQL0418N,这可能是您在查看本机错误时收到的实际错误。