开发文档 v2.x

批量更新(updateMany)

更新时间:2024年2月17日 17:43 浏览:262

批量更新多个对象或数组到数据库

public function updateMany(string $table, array $objects, $primaryKey = null): int

参数:

  • string $table - 表名
  • array $objects - 要插入数据库的对象数组或二维数组,对象属性或数组键名需要和该表字段一致
  • null | string | array $primaryKey 主键或指定键名更新,未指定时自动取表的主键

返回值:

  • int - 更新的行数,如果数据无变化,则返回0,更新失败时抛出异常

 

批量更新方法可以有效防止SQL注入,执行时先编译 SQL 横板,然后再通过占位符 循环 注入数据。

 

对象数组形式:

$objs = [];

$obj1 = new stdClass();
$obj1->id = 'cf8ee5b8-9b8f-11ec-9b24-0242ac180065';
$obj1->name = '马云';
$objs[] = $obj1;

$obj2 = new stdClass();
$obj1->id = 'd8c5844c-9e12-11ec-a3cb-0242ac180065';
$obj2->name = '刘强东';
$objs[] = $obj2;

$effectRows = Be::getDb()->updateMany('user', $objs);
// 指定主键
// $effectRows = Be::getDb()->updateMany('user', $objs, 'id');

将编译 SQL

UPDATE `user` SET `name`=? WHERE id=?;

再循环注入多行数据

['马云', 'cf8ee5b8-9b8f-11ec-9b24-0242ac180065']
['刘强东', 'd8c5844c-9e12-11ec-a3cb-0242ac180065']

 

二维数组形式:

$arrs = [
    [
        'id' =>  'cf8ee5b8-9b8f-11ec-9b24-0242ac180065',
        'name' => '马云',
    ],
    [
        'id' =>  'd8c5844c-9e12-11ec-a3cb-0242ac180065',
        'name' => '刘强东',
    ]
];

$effectRows = Be::getDb()->updateMany('user', $arrs);

 

按非主键更新

$arrs = [
    [
        'name' => '马云',
        'age' => 51,
    ],
    [
        'name' => '刘强东',
        'age' => 41,
    ]
];

$effectRows = Be::getDb()->updateMany('user', $arrs, 'name');

将编译 SQL

UPDATE `user` SET `age`=? WHERE `name`=?

再循环注入多行数据

[51, '马云']
[41, '刘强东']

 

 

导航