thinkphp的CURD中,使用save方法时会出现一个奇怪的问题,即如果数据没有更新(与原数据相同),返回值判断为false。其实很久之前就发现了这个问题,一度以为是官方代码的问题,但是一直拖延到最近才想到要去解决这个问题。不得不说:“明日复明日,明日何其多。事事待明日,万事皆蹉跎。”,与君共勉!

在官网上搜索了这个问题之后,发现官方已经解决了这个问题,原本的判断:
 
$result = $Model->where('id=1')->save($data);
if($result) {
echo 'success';
}else{
echo 'false';
}
解决办法: 使用“===”判断返回值即可
 
$result = $Model->where('id=1')->save($data);
if($result !== false) {
echo 'success';
}else{
echo 'false';
}
问题解决了,但是还是没有搞明白原因,于是又去看了一下save方法实现的源代码(3.2.3版本 mysql驱动):
 
Tp中模型的底层是由pdo类封装而来的,所以继续查找pdo中的rowCount方法:
 
原因找到了,因为数据没有变动,所以数据中影响的条数为零 ,返回值为 0,而 0 在php判断中又是false,所以就出现了上述的情况。当使用“===”判断时,由于判断了变量的类型,0 和 false就不相等了,问题解决。
 

TP5更新数据成功,但判断结果不符的更多相关文章

  1. python + mysql 实现表更新数据

    实例如下: import pymysqldef Update_Set(): #打开数据库链接 db = pymysql.connect("localhost","root ...

  2. thinkphp判断更新是否成功

    如何判断一个更新操作是否成功 $Model = D('Blog'); $data['id'] = 10; $data['name'] = 'update name'; $result = $Model ...

  3. ThinkPHP判断更新是否成功的正确方法

    如何判断一个更新操作是否成功 $Model = D('Blog'); $data['id'] = 10; $data['name'] = 'update name'; $result = $Model ...

  4. [译]Stairway to Integration Services Level 4 - 增量更新数据

    在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...

  5. open sql 更新数据

    insert语句: 1.插入单行数据有两种方法:wa是一个工作区 insert into dbtab values wa. insert into dbtab from wa. 该语句也可以将数据行插 ...

  6. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  7. 【SQL模板】三.插入/更新 数据模板TSQL

    ---Name: 插入/更新 数据模板.sql ---Purpose: 用于更新 数据库中 历史数据 或 插入 新数据 的脚本模板 ---Author: xx ---Time: 2015-12-18 ...

  8. ThinkPHP 更新数据 save方法

    ThinkPHP save() 方法 ThinkPHP 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用. 例子: public function update(){ header(& ...

  9. postgresql 存储过程动态更新数据

    -- 目标:动态更新表中数据 -- 老规矩上代码-----------------------------tablename 表名--feildname 字段名数组--feildvalue 字段值数组 ...

随机推荐

  1. golang web框架 kratos中的日志框架

    kratos是bilibili开源的一个web框架. 日志用法: logger.go package kratoslog import ( "flag" "github. ...

  2. OSI网络参考模型学习

    文章目录 一.计算机与网络的发展 1.1 批处理系统 1.2 分时系统 1.3 计算机之间的通信 1.4 基于分组交换技术的计算机网络 1.5 互联网时代的计算机网络 1.6 计算机网络中协议的规定 ...

  3. 腾讯云TDSQL MySQL版 - 开发指南 分布式事务

    由于事务操作的数据通常跨多个物理节点,在分布式数据库中,类似方案即称为分布式事务. TDSQL MySQL版 支持普通分布式事务协议和 XA 分布式事务协议.TDSQL MySQL版(内核5.7或以上 ...

  4. C 静态存储动态存储

    首先,我们可以把程序所占的内存空间分为三个部分:(可以根据静态资源区.栈区.堆区来划分) 静态存储:程序运行期间由系统分配固定得到存储空间(栈): 动态存储:开发者根据自身需要进行动态分配的存储空间( ...

  5. redis并发锁

    1.应对并发场景 避免操作数据不一致 将对redis加锁 2.考虑到异常状况无法释放锁,导致死锁 将代码块进行try-catch处理 3.考虑try时宕机依然导致死锁 对锁添加时效性,添加过期时间 4 ...

  6. Java规范化代码eclipse模板注释

    建议下载阿里规范化插件 阿里的new java file的注释模板(Type): /**  * @author ${user}  * @date ${currentDate:date('YYYY/MM ...

  7. jQuery中的表单对象属性过滤选择器(四、八)::enabled、:disabled、:checked、:selected

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  8. ProjectEuler 007题

    题目:By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is ...

  9. py2neo学习记录

    py2neo 通用 # -*- coding: UTF-8 -*- from py2neo import Graph, Node, Relationship, walk, NodeMatcher, R ...

  10. final 关键字,你想知道的都在这里

    哈喽,大家好,我是指北君. 介绍完 native.static 关键字后,指北君马不停蹄,接着为大家介绍另一个常用的关键字--final. 对于Java中的 final 关键字,我们首先可以从字面意思 ...