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方法?
...全文
566 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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注入
代码下载链接: https://pan.quark.cn/s/b27638adc362 在工业自动化监控领域中,WinCC 被视为一种常用的可视化软件,其功能在于构建人机界面(HMI)以及SCADA系统。本资料将阐释在WinCC环境下如何构建一个展现管道中流体流动的动态效果,此功能主要通过C动作脚本来完成。在此过程中,我们需要构建两个矩形,分别标记为 rec1 和 rec2。这两个矩形的高度相等,但 rec1 的宽度要小于 rec2。在具体实施时,rec1 将作为展示流体运动的可见单元,而 rec2 则作为辅助元素,尽管其“显示”属性被设为关闭,但在程序执行期间,其属性参数对流体动画的表现起着决定性作用,因为 rec2 与 rec1 的宽度差将决定流体每次移动的长度。 随后,我们需要将 rec1 和 rec2 整合为一个自定义对象。在自定义对象的属性配置中,应包含 rec1.Left、rec1.Width、rec1.Visible 和 rec2.Width 这些核心属性。这些属性将有助于在C脚本中精确控制对象的位置和可见状态,以达成流体运动的视觉效果。同时,用户可根据实际需求增加其他属性,以增强自定义对象的功能性。 在自定义对象的C脚本部分,我们设定了一个周期为“250ms”的触发器。该脚本的核心职责是计算并更新流体块的位置。借助 GetPropBOOL、GetPropWord 和 GetLeft 函数,我们可以获取对象的当前状态,涵盖其可见性、位置及宽度等参数。在循环操作中,流体块(rec1)将向右移动 rec2 - rec1 的距离,一旦流体块移出显示范围(即 rec1 的右边界达到或超过 rec2 的左边界),它将重新回到起始位置,从而形成流体持续流动的模...

4,250

社区成员

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

试试用AI创作助手写篇文章吧