【发布时间】:2014-05-26 09:51:40
【问题描述】:
我遇到了这个让我完全难过的问题。这是我的执行模式。 PDO 调用嵌套在 foreach 循环中。
foreach(){
foreach(){
}
}
我在 MySQL 中使用 PDO,当我连续执行 UPDATE 查询时,它们在循环中相互干扰。我知道他们从注释掉一组单独工作,然后执行另一组。这是我正在处理的代码模板:
$set_data1 = "UPDATE data_table
SET data_status = 'PROCESSED'
WHERE data_id = :data_id1";
$stmt = $db->prepare($set_data1);
$stmt->bindParam(':data_id1', $data_array1['data_id'], PDO::PARAM_INT);
$stmt->execute();
$set_data2 = "UPDATE data_table
SET data_status = 'PENDING'
WHERE data_id = :data_id2";
$stmt = $db->prepare($set_data2);
$stmt->bindParam(':data_id2', $data_array2['data_id'], PDO::PARAM_INT);
$stmt->execute();
由于某种原因,在嵌套的 foreach 循环中执行两个查询时,来自 $set_data1 的数据被 $set_data2 取消。我试过用 $stmt->closeCursor(); 关闭光标我尝试使用单个语句进行准备,并将新参数绑定到语句。我尝试将 $stmt 和 $db 实例设置为 null,然后重新实例化它们无济于事。我试过在查询中使用 CASE THEN 和 IF 条件......什么都没有。任何有关问题所在的信息都会很棒。我不知道 PDO 是否在循环内对同一张表调用 UPDATES 时出错,因为我在其他地方从未遇到过这个问题。提前致谢!
【问题讨论】:
-
您没有显示准备 $data_array1 和 $data_array2 的代码。两者中的 data_id 是否可能/可能相同?
-
不,ID 完全不同,因为它们之前使用不同的参数检索,然后存储在单独的数组中。
-
你能发布它在 foreach 循环中的外观吗?我怀疑你没有在正确的地方调用 execute。
标签: php mysql pdo foreach nested