thinkphp的数据库save方法,如果其中一个键值为空为什么拼出来的sql不带引号?

zktz1 2015-05-12 03:27:46
例如代码是这样的

$m=M('member');
$data=$_POST;
$data['id']=3;//主键
$member=$m->save($data);

这里如果$_POST['email']='';
那么拼出来的sql就是 email=, 没有引号,然后就不能update了,$member=0。
换句话说只要$data里有空的键值,那么save($data)就会失败。
换了写法->where('id='.$id)->data($data)->save()也不行

我搜了1个小时了,最后没辙,只能把没有值的替换成NULL,然后数据里写入了‘NULL’,在输出的时候再把‘NULL’替换成''

各位大大,这个是thinkphp自身的问题吗?
还是说我不应该用这个save($data)方法,还有别的方便的update方法?
...全文
477 5 打赏 收藏 转发到动态 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhasheng 2015-06-16
  • 打赏
  • 举报
回复

$m=M('member');
$data=$_POST;
$data['id']=3;//主键
if($m->create($data)){
    $member=$m->save();
}
或者修改时,将主键写入隐藏表单

$m=M('member');
if($m->create()){
    $member=$m->save();
}
Seven小七 2015-06-15
  • 打赏
  • 举报
回复
一般这种情况我都是在数据库给默认值。 email 给默认null 数字型给默认0这样就可以直接操作。$data = $_POST ; 过滤$data值后M('表名')->where($where)->save($data);这样用就没错了。
dr21c 2015-06-15
  • 打赏
  • 举报
回复
不应该吧,除非email是必填字段;
weipingti 2015-05-14
  • 打赏
  • 举报
回复
$m=M('member'); $data=$_POST; $id=3;//主键id(更新id等于3的数据是吗?) $member=$m->where("id=".$id)->save($data);
youarelose 2015-05-14
  • 打赏
  • 举报
回复
尽量少用$_POST,试试用_post()方法,直接用$_POST很容易被SQL注入
相关推荐

4,249

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告