DB2 выбрать, чтобы установить параметры, а затем вставить с параметрами - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать PDO для подготовки вставки DB2 в сценарии php, и он выдает мне сообщение об ошибке «Маркер параметра или NULL недействителен»

Я выполняю запрос выбора для получения значений иустановите их как параметры, тогда у меня есть мой оператор вставки.Я подготавливаю его и в течение некоторого цикла на основе выборки из первого запроса устанавливаю параметры, чтобы можно было выполнить вставку с нужными мне значениями.Проблема в том, что происходит сбой в строке, где я готовлю вставку.

Первый запрос запускается и печатает

[ORDERNUMBER] 123456
[CUSTOMER] 1
[PRODUCT] 123
[FABR] A
[COLOR] 1
[SHIPDATE] 20181119

Итак, данные возвращаются, и я даже начал приводить данныетипы, но я все еще получаю сообщение об ошибке.

Вот начальный выбор, который печатает выше:

//SELECT query to get source data
$getOrderDetails = "
    SELECT 
         cast(invnoc as int) as ORDERNUMBER,
         cast(cstnoc as int) AS CUSTOMER,
         cast(PRODUCTc as int) AS PRODUCT,
         cast(covr1c as int) AS FABR,
         cast(colr1c as int) AS COLOR ,
         cast(extd2d as varchar(45)) AS SHIPDATE,
    FROM testTable g
";

try {
    $orderDetailCheck = $DB2conn->prepare($getOrderDetails);
    $detailRslt = $orderDetailCheck->execute();
    $orderDetailCount = $orderDetailCheck->fetch();
    print_r($orderDetailCount);
}catch(PDOException $ex) {
    echo "QUERY ONE FAILED!: " .$ex->getMessage();
}

Оператор вставки:

$insertPlacement = "
    INSERT INTO table (CUSTOMER_id, start_date, expire_date)
    SELECT DISTINCT
        :CUSTOMER, 
        (to_date(:SHIPDATE, 'YYYYMMDD') + 7 DAYS)  as start_date,
        (to_date(:SHIPDATE, 'YYYYMMDD') + 127 DAYS)  as expire_date
    from OFSTable ofs
    WHERE  ofs.PRODUCT=:PRODUCT AND ofs.FABR1=:FABR AND ofs.color1=:COLOR;
";

Установка параметров:

//this line is failing
$insert = $DB2conn->prepare($insertPlacement);

while ($row2 = $orderDetailCheck->fetch(PDO::FETCH_ASSOC)) {

    $insertParams = [
        ":CUSTOMER" => $row2["CUSTOMER"],
        ":ORDERNUMBER" => $row2["ORDERNUMBER"],
        ":PRODUCT" => $row2["PRODUCT"],
        ":FABR" => $row2["FABR"],
        ":COLOR" => $row2["COLOR"],
    ];

Я понимаю, что проблема в том, что я не могу вызывать параметры как имена столбцов или таблиц, но это работает в mysql, и это не для db2.Мне нужно вставить значение для параметра: CUSTOMER, но он действует так, как будто я не могу этого сделать.Как я должен изменить это, чтобы работать на db2, как это было на Mysql?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы должны разыграть все параметры.Например:

SELECT DISTINCT CAST(:CUSTOMER AS INT) ... fs.PRODUCT=CAST(:PRODUCT AS INT) ...

Источник:

SQL Call Builder возвращает 'Инструкция содержит недопустимое использование маркера параметра .. SQLCODE = -418, SQLSTATE =42610 '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...