牛骨文教育服务平台(让学习变的简单)
博文笔记

ThinkPHP save() 方法

创建时间:2017-12-07 投稿人: 浏览次数:610
public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    // 需要更新的数据
    $data["email"] = "Jack@163.com";
    // 更新的条件
    $condition["username"] = "Jack";
    $result = $Dao->where($condition)->save($data);
    //或者:$resul t= $Dao->where($condition)->data($data)->save();

    if($result !== false){
        echo "数据更新成功!";
    }else{
        echo "数据更新失败!";
    }

}

上面例子执行的 SQL 语句为:

UPDATE user SET email="Jack@163.com" WHERE username="Jack"//
condition里面的字段名就是你需要更新的库里的条件字段,而data里的字段就是你要更新的那条字段。从上面的等价语句可以很清晰的了解这点。
提示

为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。

因此要使用 save() 方法更新数据,必须指定更新条件或者更新的数据中包含主键字段。

使用主键的例子:

public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    // 需要更新的数据
    $data["email"] = "Jack@163.com";
    $data["uid"] = 2;//包含主键信息
    $result = $Dao->save($data);

    if($result !== false){
        echo "数据更新成功!";
    }else{
        echo "数据更新失败!";
    }
}

如果需要更新的数据里面包含主键,那么 ThinkPHP 会自动把主键的值作为条件来更新。上面的例子跟下面的效果相同:

    // 需要更新的数据
    $data["email"] = "Jack@163.com";
    // 更新的条件
    $condition["uid"] = 2;
    $result = $Dao->where($condition)->save($data);

如果是表单数据,还可以使用 create() 方法创建数据对象来更新数据:

public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = D("User");

    if($vo = $Dao->create()) {
        $result = $Dao->save();
        if($result !== false){
            echo "数据更新成功!";
        }else{
            echo "数据更新失败!";
        }
    }else{
        $this->error($Form->getError());//不懂这里的更新信息在哪里?
    }
}

如果更新的数据需要做逻辑处理,可以在操作类以对象的方式处理或者在模型内处理,具体可参考《ThinkPHP 表单数据智能写入 create 方法》。

2017-12-06

赛事报名系统后台修改赛事信息时组别中的赛事字段同步修改功能时用到。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。