手册目录
前言[随时更新]
MySQL快速复习
MySQL原生查询
选择数据表
删除数据
聚合查询
时间查询
视图查询
子查询
总结/参考
系统中有二个update方法,名称相同,功能不同

该update方法负责根据条件,生成更新记录的SQL语句

该update方法根据主键、更新记录操作
源码最后片段:
// 生成UPDATE SQL语句
$sql = $this->builder()->update($data, $options);
// 获取参数绑定
$bind = $this->getBind();
if ($options['fetch_sql']) {
// 获取实际执行的SQL语句
return $this->connection->getRealSql($sql, $bind);
} else {
// 检测缓存
if (isset($key) && Cache::get($key)) {
// 删除缓存
Cache::rm($key);
}
// 执行操作
return '' == $sql ? 0 : $this->execute($sql, $bind);
}
最终调用原生SQL:$this->execute($sql, $bind); 完成;
可见,前面学过的execute方法十分重要。
| 序号 | 输入参数 | 返回值 |
|---|---|---|
| 1 | $data[ ]数组 必须含主键 |
受影响记录条数 即更新数 |
Db::table( 'table_name' ) -> update( $data ); // 更新记录

<?php
namespace app\index\controller;
use think\Db;
class Index {
public function index(){
// 1.创建员工信息数组
$data = [];
$data['id'] = 1022;
$data['salary'] = 8540;
$data['hiredate'] = '2010-11-20';
// 2.更新数据
Db::setTable('tp5_staff')->update($data);
// 3.查看更新结果
dump(Db::find(1022));
}
}
源码中:setTable方法与table方法,都可以指定数据表,区别是:
1.table方法设置当前数据表;
2.setTable方法设置默认数据表;
在本实例中,二者是没有区别的。
array(7) {
["id"] => int(1022)
["name"] => string(12) "司马道长"
["sex"] => int(1)
["age"] => int(39)
["salary"] => float(8540)
["dept"] => int(0)
["hiredate"] => string(10) "2010-11-20"
}
更新数据时,一定要设置更新条件,否则拒绝执行;
- 更新条件可以是主键,也可以复合主键(以后遇到再细说);
- 还可以用:isUpdate方法进行判断,后面会讲到。
科技资讯
24小时阅读榜
1
2
3
4
5
6
7
8
9
10
精品课程
共5课时 | 18万人学习
共49课时 | 82.2万人学习
共29课时 | 65万人学习
共25课时 | 41.3万人学习
共43课时 | 76.7万人学习