Ошибка при вставке db2 с параметризованным запросом PHP - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь запустить параметризованный запрос db2 в PHP и при выполнении вставки я получаю сообщение об ошибке: 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"
}

Что я здесь не так делаю? Даже если я вычеркну одно значение, чтобы вставить только одно, или другое, я все равно получу его, поэтому он не указан c для одного столбца.

1 Ответ

2 голосов
/ 17 февраля 2020

Может быть, odb c не может поддерживать повторное использование подготовленного оператора, или вашего драйвера, или другой части вашего кода, или чего-то другого. В любом случае, переместите подготовленный оператор в свой foreach l oop, чтобы убедиться, что вы его перестроите:

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