快速批量替换(quickReplaceMany)
更新时间:2024年7月11日 13:26
浏览:360
快速批量替换多个对象或数组到数据库
public function quickReplaceMany(string $table, array $objects): int
参数:
- string $table - 表名
- array $objects - 要替换的对象数组或二维数组,对象属性或数组键名需要和该表字段一致
返回值
- int 影响的行数,如果数据无变化,则返回0,失败时抛出异常
快速批量替换方法没有预先编译 SQL 横板,而是直接生成 SQL,但数据会通过 PDO 提供的 quote 方法处理 防止注入。
因为少了编译 SQL 的步骤,快速批量替换方法执行速度更快。项目实践中,每分钟能插入 100 万条以上的数据。
对象数组形式:
$objs = [];
$obj1 = new stdClass();
$obj1->name = '马云';
$obj1->age = '50';
$objs[] = $obj1;
$obj2 = new stdClass();
$obj2->name = '刘强东';
$obj2->age = '40';
$objs[] = $obj2;
// ... 更多数据
// 跟据字段数多少控制一次处理多少条,例如一次处理 5000 条
$effectRows = Be::getDb()->quickReplaceMany('user', $objs);
将执行 SQL
REPLACE INTO `user` (`name`, `age`) VALUES
('马云', '50'),
('刘强东', '40'),
// ...
二维数组形式:
$arrs = [
[
'name' => '马云',
'age' => '50',
],
[
'name' => '刘强东',
'age' => '40',
],
// ...
];
$effectRows = Be::getDb()->quickReplaceMany('user', $arrs);