db2_prepare():绑定参数

时间:2015-11-17 14:36:11

标签: php db2 db2-400

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

如果我将其更改为此,则可以:

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

为什么绑定参数时失败,但直接插入时有效?我自然希望绑定参数,因此我不必为这种情况添加不必要的清理。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

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

我不确定PHP是否有选项,但在C#中,您可以在定义参数时传入该类型,因此这可能是一个选项,如果它可用,而不是硬 - 在SQL中编码类型。

查看此other answer I have,了解如何获取" native" DB2错误,可能比PHP抛出的错误更有帮助。我也有another answer about SQL0418N,这可能是你在查看原生错误时会收到的实际错误。