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方法进行判断,后面会讲到。