【问题标题】:Error doing db2 insert with PHP parameterized query使用 PHP 参数化查询执行 db2 插入时出错
【发布时间】:2020-02-17 20:01:35
【问题描述】:

我正在尝试在 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"
}

我在这里做错了什么?即使我取出一个值只插入一个或另一个我仍然得到它,所以它不是特定于一列。

【问题讨论】:

  • 你可以试试把prepare放在foreach里面。不确定 odbc 驱动程序或代码中的某些内容是否会在这里搞砸。如果这是您的代码,您可以使用 insert into table 2 select id, timestamp from table 1 对其进行更改并使其在 1 次中运行。
  • @FelippeDuarte 我会把它移到循环里面看看。我无法进行选择/插入,因为我要从 IP/服务器上的一个表进入另一个表
  • @FelippeDuarte 哇,确实修复了它!非常感谢,如果你想把它变成答案,我会接受它
  • 没问题。不过,我不知道出了什么问题,但至少它正在工作。

标签: php odbc db2-400


【解决方案1】:

也许 odbc 不支持重复使用准备好的语句、驱动程序、代码的其他部分或其他东西。 无论如何,将准备好的语句移动到你的 foreach 循环中,以确保你将重建它:

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

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2018-07-30
    • 2023-03-04
    相关资源
    最近更新 更多