Q:没有对信息进行修改为什么会提示修改失败呢?
Problem Description:使用ThinkPHP框架(ver3.2.5)进行修改信息模块的开发时,使用ajax将多组数据使存在FormData里面,从后台通过$_POST方法传入控制器。控制器中使用$data数组将传进来的数据信息进行保存。最后使用M()方法将数据库中的表来实例化,最后通过save()方法将数据更新。判断条件如下:
if($download_table->where('id='.$id)->save($data))
echo "修改成功!";
else
echo "修改失败!";
注:$download_table是M(‘数据表的名字’),$id是ajax拿过来的。
在对这段代码进行测试的时候发现,如果不对信息进行修改,就会返回“修改失败!”。在控制器的类文件中使用var_dump()方法、在引用的外部JQ中使用console.log对“提交修改”这一瞬间的所有信息进行抓取以后发现所有数据都在,并没有出现数据丢失的情况。那为什么会修改失败呢?
A:跑到论坛去发现是由于判断条件不对造成的。save()方法返回的值是数据表中受影响的行数,在不对信息进行修改的时候,save()方法的返回值为0,即没有行受到影响。if(0)即为修改失败。当返回false的时候是数据更新失败!
Solution:采用严格比较的方式,0和false不严格相等,就会返回“修改成功!”。代码如下:
if(false !==$download_table->where('id='.$id)->save($data))
echo "修改成功!";
else
echo "修改失败!";
还有一种方式就是在数据库中添加一个保存时间戳的栏位,每次更新时更新时间戳,便可以采用问题中的判断条件了。(时间戳会一直改变,返回值至少为1).
Epic Moment:学习CURD方法时千万要记清楚方法的返回值。
C:add()方法,返回值为新增的id号。
U:save($data);方法,返回值为受影响行数。
R:select()方法,以数组形式返回为所有数据。
D:delete()方法,返回值为受影响行数。
关于:这个专题是记录那些开发时百思不得解但是最后茅塞顿开的问题。这种醍醐灌顶的感觉对我来说即为Epic Moments。