PDO从先前选择插入的绑定参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO从先前选择插入的绑定参数相关的知识,希望对你有一定的参考价值。
执行以下脚本时,我的INSERT中出现错误,表示参数号无效:没有绑定任何参数。
如果我根据之前选择的值手动运行插入,那就没关系。我知道语法和关系都没问题。我的问题是我如何绑定参数或调用执行。
同样,这个脚本的第一部分返回它需要的所有内容,但是我的问题发生在我的insert语句中,特别是在调用insert语句后出错。
也许这仍然是我缺乏PDO的经验,但从我的文档来看,这似乎应该有效。
$order_ids = [];
while ($row = $ordStat->fetch(PDO::FETCH_ASSOC)) {
$order_ids[] = $row['order_id'];
}
if (count($order_ids) > 0) {
$placeholders = implode(',', array_fill(0, count($order_ids), '?'));
$detailStatCheck = "
SELECT
invnoc as INVOICE,
fstatc as STATUS,
cstnoc AS DEALER,
framec AS FRAME,
covr1c AS COVER,
colr1c AS COLOR ,
extd2d AS SHIPDATE,
orqtyc AS QUANTITY
FROM GPORPCFL
WHERE invnoc IN ($placeholders)
";
try {
$detailCheck = $DB2conn->prepare($detailStatCheck);
$detailRslt = $detailCheck->execute($order_ids);
$count2 = $detailCheck->fetch();
print_r($order_ids);
print_r($count2);
} catch(PDOException $ex) {
echo "QUERY FAILED!: " .$ex->getMessage();
}
while ($row2 = $detailCheck->fetch(PDO::FETCH_ASSOC)){
$insertPlacement = "
INSERT INTO placements_new (sku_id, group_id, dealer_id, start_date, expire_date, locations, order_num)
SELECT
id,
sku_group_id,
:DEALER,
DATE_ADD(DATE_FORMAT(CONVERT(:SHIPDATE, CHAR(20)), '%Y-%m-%d'),INTERVAL 7 DAY) as start_date,
DATE_ADD(DATE_FORMAT(CONVERT(:SHIPDATE, CHAR(20)), '%Y-%m-%d'),INTERVAL 127 DAY) as expire_date,
:QUANTITY,
:INVOICE
FROM skus s
WHERE s.frame=:FRAME AND s.cover1=:COVER AND s.color1=:COLOR
";
try{
$insert = $mysqlConn->prepare($insertPlacement);
$insertRslt = $insert->execute();
}catch(PDOException $ex){
echo "QUERY FAILED!!!: " . $ex->getMessage();
}
}
}
答案
您需要实际绑定参数(错误在这里很有用:invalid parameter number: no parameters were bound
)。您需要将包含要分配给每个参数的值的数组传递给execute()
:
$values = [
":DEALER" => $row2["DEALER"],
":SHIPDATE" => $row2["SHIPDATE"],
":QUANTITY" => $row2["QUANTITY"],
":INVOICE" => $row2["INVOICE"],
":FRAME" => $row2["FRAME"],
":COVER" => $row2["COVER"],
":COLOR" => $row2["COLOR"],
];
然后
$insertRslt = $insert->execute($values);
请注意,如果您将ATTR_EMULATE_PREPARES
设置为false
,则不能使用两个(或更多)次命名参数,因此您需要将:SHIPDATE
作为:SHIPDATE
和:SHIPDATE2
以及$values
数组中的相应附加值。
以上是关于PDO从先前选择插入的绑定参数的主要内容,如果未能解决你的问题,请参考以下文章
Pdo - 将值插入数据库错误 SQLSTATE [HY093] [重复]