mysql update foreach_php – Foreach循环中的PDO和MySQL UPDATE

对于初学者,你使用bindParam()就像它的bindValue()一样,它们是quite different.

如果没有看到你从哪里得到你的数组值,那就更难以确定是什么了.看起来您提供的信息实际上可能不是您正在使用的代码并且已被修改,特别是关于foreach循环和data_array变量,因为您所描述的是BindParam常见的问题所以这是我的假设我会继续努力.如果是这种情况,通常最好提供实际的代码片段,包括使用的变量的初始化和发现问题的块,而不仅仅是这些块中的代码.

这是另一个答案with why,基本上确保你通过引用foreach循环的值部分或者将bindParams更改为bindValues.如果您计划继续使用此结构,那么您还需要确保在此处使用两个单独的对象而不是一个,因为每次调用execute()时都运行bindParam()方法.

所以,比方说,代码结构没有改变(它可能应该是因为它全部在循环中,只有Execute应该在循环中):

$set_data1 = "UPDATE data_table

SET data_status = 'PROCESSED'

WHERE data_id = :data_id1";

$stmt = $db->prepare($set_data1);

$stmt->bindValue(':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";

$stmt2 = $db->prepare($set_data2);

$stmt2->bindValue(':data_id2', $data_array2['data_id'], PDO::PARAM_INT);

$stmt2->execute();

更好的方法是这样做(请记住这只是一个普遍的例子):

$set_data = "UPDATE data_table

SET data_status = :data_status

WHERE data_id = :data_id";

$data_array = array( array('data_status' => $dataStatus1, 'data_id' => $dataId), array('data_status' => $dataStatus2, 'data_id' => $dataId2) );

/* this is just to represent a multidimensional array (or a multidimensional object) containing the data status and the data id which should be handled and decided before you pass them into a loop. */

$stmt = $db->prepare($set_data);

$data_status = null;

$data_id = null;

$stmt->bindParam(':data_status', $data_status);

$stmt->bindParam(':data_id', $data_id);

foreach( $data_array as $name => $val ) {

$data_status = $val['data_status'];

$data_id = $val['data_id'];

$stmt->execute()';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值