Я пытаюсь использовать 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?