Mysql PDO-更新和设置查询(2个数组)
所以我有两个数组需要在MySQL中更新和设置。项目编号[1,2,3]和项目订单[2,1,3] 以下是数组插入之前的items表:Mysql PDO-更新和设置查询(2个数组),mysql,arrays,pdo,Mysql,Arrays,Pdo,所以我有两个数组需要在MySQL中更新和设置。项目编号[1,2,3]和项目订单[2,1,3] 以下是数组插入之前的items表: item_id item_order 1 1 //should become 2 2 2 // should become 1 3 3 // should become 3 插入的数组应成对,1-2、2-1、3-3。 如何有效地使用准备好的语句执行此操作,以及如何测试数组项是否确实是数字?以下是一个示例:
item_id item_order
1 1 //should become 2
2 2 // should become 1
3 3 // should become 3
插入的数组应成对,1-2、2-1、3-3。
如何有效地使用准备好的语句执行此操作,以及如何测试数组项是否确实是数字?以下是一个示例:
更新mytable
设置myfield=案例其他_字段
当1时,则为“值”
当2时,则为“值”
当3时,则为“值”
结束
其中(1,2,3)中的id假设您有如下输入:
$item_id = array(1, 2, 3);
$item_order = array(2, 1, 3);
// and a PDO connection named $pdo
你可以试试这样的。(我还假设您已将PDO配置为)
但是重新设计输入可能更好——只按所需的顺序传递
item\u id
,并自动计算它们的item\u顺序
值。这是很多情况:)仍在寻找更多关于这方面的答案:)您是否考虑过服务器端脚本,例如php或mysql?@tunisefasipe php和mysql:)谢谢DCoder,将尝试一下。但是你重新定义输入的确切含义是什么?你能给我举个例子吗?@Wonka:我的意思是,你应该按照正确的顺序传递ID,让insert循环生成实际的$order
值。看看这个方法。
function all_numbers($input) {
foreach($input as $o) {
if(!is_numeric($o)) {
return false;
}
}
return true;
}
if(count($item_id) != count($item_order)) {
throw new Exception("Input size mismatch!");
}
if(!all_numbers($item_id) || !all_numbers($item_order)) {
throw new Exception("Invalid input format!");
}
$pairs = array_combine($item_id, $item_order);
// now $pairs will be an array(1 => 2, 2 => 1, 3 => 3);
if($pdo->beginTransaction()) {
try {
$stmt = $pdo->prepare('UPDATE `items` SET `item_order` = :order WHERE `item_id` = :id');
foreach($pairs as $id => $order) {
$stmt->execute(array(
':id' => $id,
':order' => $order,
));
}
$pdo->commit();
} catch (Exception $E) {
$tx->rollback();
throw $E;
}
} else {
throw new Exception("PDO transaction failed: " . print_r($pdo->errorInfo(), true));
}