我有一个有效的测试脚本,它在做一些非常简单的事情:
从一个表中获取一个order_id,然后基于该order_id从另一个表中选择所有数据。
这行得通,但我对在本文结尾处进行其他操作的最佳方法有些困惑。
我在$getOrderNumbers
中的查询是否返回一个或多个记录,而在$getOrderDetails
每次成功执行后,while循环中的以下脚本将执行一个或多个记录。我的STATUS
表中其他原始记录的字段。
这是工作脚本:
$getOrderNumbers = "
SELECT
ORDER_ID
FROM STATUS
WHERE ORDER_STATUS = 'S'
AND IS_ACTIVE = 0
";
try {
$getNumbers = $DB2conn->prepare($getOrderNumbers);
$ORDNumbers = $getNumbers->execute();
}catch(PDOException $ex) {
echo "QUERY ONE FAILED!: " .$ex->getMessage();
}
while ($row2 = $getNumbers->fetch(PDO::FETCH_ASSOC)) {
$orderNumParams = [
":ORDER_ID" => $row2["ORDER_ID"],
];
print_r($row2);
$getOrderDetails = "
SELECT *
FROM tableOne
WHERE invoice = :ORDER_ID
";
try {
$orderDetailCheck = $DB2conn->prepare($getOrderDetails);
$detailRslt = $orderDetailCheck->execute($orderNumParams);
$orderDetailCount = $orderDetailCheck->fetch();
print_r($orderDetailCount);
}catch(PDOException $ex) {
echo "QUERY ONE FAILED!: " .$ex->getMessage();
}
}
基本上,当成功查询每个记录的tableOne时,我想像这样对STATUS运行更新:
UPDATE STATUS
SET IS_ACTIVE = 1
AND DATE_UPDATED = CURRENT_DATE;
如何做到这一点,以便每次成功完成后都可以设置原始表并通过此更新进行记录?
因此,如果我的第一个查询获得ORDER_ID 123456,那么当我的第二个查询成功时,我将基本上运行:
UPDATE STATUS
SET IS_ACTIVE = 1
AND DATE_UPDATED = CURRENT_DATE
WHERE ORDER_ID = 123456;
答案 0 :(得分:1)
准备另一条语句进行更新。
$update = $DB2conn->prepare("
UPDATE STATUS
SET ACTIVE = 1, DATE_UPDATED = CURRENT_DATE
WHERE ORDER_ID = :ORDER_ID");
请注意,要更新的列用逗号而不是AND
隔开。
然后在循环中可以执行以下操作:
$update->execute($orderNumParams);
顺便说一句,您不需要每次循环都调用$DB2conn->prepare($getOrderDetails);
。您只需要准备一次语句,然后在循环中执行它即可。