我正在尝试为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);
为什么绑定参数时失败,但直接插入时有效?我自然希望绑定参数,因此我不必为这种情况添加不必要的清理。
我有什么遗失的吗?
答案 0 :(得分:1)
正如评论中所提到的,我猜测你的问题是DB2无法确定你的参数在进行绑定时的类型。如果在参数周围添加CAST
来告诉DB2传递的类型,它应该可以工作。
我不确定PHP是否有选项,但在C#中,您可以在定义参数时传入该类型,因此这可能是一个选项,如果它可用,而不是硬 - 在SQL中编码类型。
查看此other answer I have,了解如何获取" native" DB2错误,可能比PHP抛出的错误更有帮助。我也有another answer about SQL0418N
,这可能是你在查看原生错误时会收到的实际错误。