使用PHP参数化查询执行db2插入时出错

问题描述 投票:0回答:1

我正在尝试在PHP中运行db2参数化查询,并在执行插入操作时收到错误消息:Invalid parameter number., SQL state S1002 in SQLDescribeParameter

这是我的脚本:

        $getItems = "
        SELECT 
            ID,
            EXPIRATION_TIMESTAMP
        FROM table1
    ";

    $stmt = odbc_exec($DB2connDEV, $getItems);

    $prepInsert = odbc_prepare($DB2connPROD, "INSERT INTO table2 (originalID, expiration_timestamp) VALUES(?,?)");

    while($gettingDevItems = odbc_fetch_array($stmt)){

        $rows[] = $gettingDevItems;
    }

    foreach($rows as $row){

        $originalID = $row['ID'];
        $expiration_timestamp = $row['EXPIRATION_TIMESTAMP'];


        $getIdentity = "SELECT IDENTITY_VAL_LOCAL() AS LASTID FROM SYSIBM.SYSDUMMY1";

        $insertTable = odbc_execute($prepInsert, array($originalID, $expiration_timestamp));//error at this line
        $insertTable = odbc_exec($DB2connPROD, $getIdentity);
        $row = odbc_fetch_array($stmt);
        $ret = $row['LASTID'];
    }

当我在参数数组上执行var_dump时,我得到了:

array(2) {
  [0]=>string(1) "2"
  [1]=>string(26) "2019-10-03 00:00:00.000000"
}

我在这里做错了什么?即使我取出一个值仅插入一个值或另一个值,我仍然会得到它,因此它并不特定于一列。

php odbc db2-400
1个回答
2
投票
也许odbc不支持重用已准备好的语句,驱动程序,代码的其他部分或其他内容。无论如何,将准备好的语句移到您的foreach循环中以确保您将重建它:

foreach($rows as $row){ $prepInsert = odbc_prepare($DB2connPROD, "INSERT INTO table2 (originalID, expiration_timestamp) VALUES(?,?)"); ...

© www.soinside.com 2019 - 2024. All rights reserved.