开发文档 v2.x

单行更新(update)

更新时间:2023年10月19日 15:32 浏览:176

更新一个对象或数组到数据库

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);

 

导航