快速更新(quickUpdate)
更新时间:2024年12月10日 12:41
浏览:803
快速更新一个对象或数组到数据库
public function quickUpdate(string $table, $object, $primaryKey = null): int
参数:
- string $table - 表名
- array | object $object - 要插入数据库的对象或数组,对象属性或数组锓名需要和该表字段一致
- null | string | array $primaryKey 主键或指定键名更新,未指定时自动取表的主键
返回值:
- int - 更新的行数,如果数据无变化,则返回0,更新失败时抛出异常
快速更新方法没有预先编译 SQL 横板,而是直接生成 SQL,但更新的数据会通过 PDO 提供的 quote 方法处理 防止注入。
因为少了预编译 SQL 的开销,快速更新方法执行速度更快,特别是批量更新时。
对象形式:
$obj = new \stdClass();
$obj->id = '92aee504-04d6-11ed-b416-0242ac180065';
$obj->name = '如花';
$obj->age = 18;
$obj->sex = '女';
$effectRows = Be::getDb()->quickUpdate('user', $obj);
// 指定主键
// $effectRows = Be::getDb()->quickUpdate('user', $obj, 'id');
将执行 SQL
UPDATE `user` SET `name`='如花', `age`=18, `sex`='女' WHERE `id`='92aee504-04d6-11ed-b416-0242ac180065';
数组形式:
$arr = [
'id' => '92aee504-04d6-11ed-b416-0242ac180065',
'name' => '如花',
'age' => 18,
'sex' => '女'
];
$db = Be::getDb();
$effectRows = $db->quickUpdate('user', $arr);
按非主键更新
$obj = new \stdClass();
$obj->name = '如花';
$obj->age = 18;
$obj->sex = '女';
$effectRows = Be::getDb()->quickUpdate('user', $obj, ['name', 'sex']);
将执行 SQL
UPDATE `user` SET `age`=18 WHERE `name`='如花' AND `sex`='女'