最近有一个批量更新数据库表中某几个字段的需求,在做这个需求的时候,使用了PDO做参数绑定,其中遇到了一个坑。方案选择笔者已知的做批量更新有以下几种方案:1、逐条更新这种是最简单的方案,但无疑也是效率最低的方案。2、CASE WHEN类似如下的语句UPDATE tbl_test SET val = CASE id WHEN 1 THEN 2 WHEN 2 THEN 3 END WHERE id IN(1, 2);PDO绑定参数为了防止SQL注入,使用了PDO扩展绑定参数。上面的数字在一般情况下是变量,那么就需要做参数绑定。刚开始是想着在IN的时候将id组成的字符串作为变量绑定过去,第一次实现的代码如下:<?php$data = array(array('id' => 1, 'val' => 2), array('id' => 2, 'val' => 3));
$ids = implode(',', array_map(function($v) {return $v['id'];}, $data)); //获取ID数组
$update_sql = 'UPDATE tbl_test SET val = CASE id';
$params = array();
$params[":ids"] = $ids;
foreac
...
继续阅读
(24)