ThinkPHP5数据库实例详解
/ update方法
update方法
update sql 方法
1、功能:根据主键,更新表中记录
2、源码分析:
系统中有二个update方法,名称相同,功能不同
1. /thinkphp/library/think/db/Buider.php 中的 update方法
该update方法负责根据条件,生成更新记录的SQL语句
2. /thinkphp/library/think/db/Query.php中的 update方法
该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方法十分重要。
3、参数和返回值
序号 | 输入参数 | 返回值 |
---|---|---|
1 | $data[ ]数组 必须含主键 | 受影响记录条数 即更新数 |
4、调用语法
Db::table( 'table_name' ) -> update( $data ); // 更新记录
5、实例演示:
- 任务:将tp5_staff表中,id等于1022 的员工的工资更新为8540,入职日期更新为:2010年11月20日
- 更新前数据表记录如下:
- Index.php 控制器源码:
<?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" }
- 现在数据表中的情况如下:
6、注意事项:
更新数据时,一定要设置更新条件,否则拒绝执行;
- 更新条件可以是主键,也可以复合主键(以后遇到再细说);
- 还可以用:isUpdate方法进行判断,后面会讲到。