单行更新(update)
更新时间:2025年3月22日 19:58
浏览:890
更新一个对象或数组到数据库
public function update(string $table, $object, $primaryKey = null): int
参数:
- string $table - 表名
- array | object $object - 要插入数据库的对象或数组,对象属性或数组锓名需要和该表字段一致
- null | string | array $primaryKey 主键或指定键名更新,未指定时自动取表的主键
返回值:
- int - 更新的行数,如果数据无变化,则返回0,更新失败时抛出异常
更新方法可以有效防止SQL注入,执行时先编译 SQL 横板,然后再通过占位符注入数据。
对象形式:
$obj = new \stdClass(); $obj->id = '92aee504-04d6-11ed-b416-0242ac180065'; $obj->name = '如花'; $obj->age = 18; $obj->sex = '女'; $effectRows = Be::getDb()->update('user', $obj); // 指定主键 // $effectRows = Be::getDb()->update('user', $obj, 'id');
将编译 SQL
UPDATE `user` SET `name`=?, `age`=?, `sex`=? WHERE id=?;
再注入一行数据
['如花', '18', '女', '92aee504-04d6-11ed-b416-0242ac180065']
注意:对象中所有字段,都将用于生成SQL语句。
数组形式:
$arr = [ 'id' => '92aee504-04d6-11ed-b416-0242ac180065', 'name' => '如花', 'age' => 18, 'sex' => '女' ]; $db = Be::getDb(); $effectRows = $db->update('user', $arr);
按非主键更新
$obj = new \stdClass(); $obj->name = '如花'; $obj->age = 18; $obj->sex = '女'; // 指定条件 $effectRows = Be::getDb()->update('user', $obj, ['name', 'sex']);
将编译 SQL
UPDATE `user` SET `age`=? WHERE `name`=? AND `sex`=?
再注入一行数据
[18, '如花', '女']
实际项目中通常从数据库中读取数据,再进行更新
// 数据对象 $db = Be::getDb(); // 指定ID $id = '92aee504-04d6-11ed-b416-0242ac180065'; // 或从GET获取 // $id = Be::getRequest()->get('id'); $sql = 'SELECT id, name, age, sex FROM user WHERE id=?'; $obj = $db->getObject($sql, [$id]); // $arr = $db->getArray($sql, [$id]); // 也可用数组形式 $obj->name = '如花'; $obj->age = 18; $obj->sex = '女'; $effectRows = $db->update('user', $obj);