• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

thinkphp问题咨询

php 搞代码 3年前 (2022-01-23) 18次浏览 已收录 0个评论
文章目录[隐藏]

字段过滤
如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:
$data[‘name’] = ‘thinkphp’;
$data[’email’] = ‘[email protected]’;
$data[‘test’] = ‘test’;
$User = M(‘User’);
$User->data($data)->add();
复制代码
其中test字段是不存在的,所以写入数据的时候会自动过滤掉。
在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:非法数据对象:[test=>test]

上面是手册里面的话,开启了debug,可是就是没报错。之前别的项目会报的。自己重新载了官网最新的源码,就是不报错。特别是update的时候,条件字段写错了,自己过滤了,把所有数据都update了,很蛋疼

回复内容:

字段过滤
如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:
$data[‘name’] = ‘thinkphp’;
$data[’email’] = ‘[email protected]’;
$data[‘test’] = ‘test’;
$User = M(‘User’);
$User->data($data)->add();
复制代码
其中test字段是不存在的,所以写入数据的时候会自动过滤掉。
在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:非法数据对象:[test=>test]

上面是手册里面的话,开启了debug,可是就是没报错。之前别的项目会报的。自己重新载了官网最新的源码,就是不报错。特别是update的时候,条件字段写错了,自己过滤了,把所有数据都update了,很蛋疼

翻了下TP3.2.3的源码,只有在$this->options[‘strict’]不为空的时候才会报错,至于在哪里操作这个options[‘strict’],没找到。

感觉是bug吧。
你可以去试着找下。

thinkphp_3.2.3_full/ThinkPHP/Library/Think/Model.class.php
第267-277行:

<code>foreach ($data as $key=>$val){    if(!in_array($key,$fields,true)){        // 如果字段不存在        if(!empty($this->options['strict'])){            // 只有在这个$this->options['strict']不为空的时候才抛异常。            E(L('_DATA_TYPE_INVALID_').':['.$key.'=>'.$val.']');        }      <em style="color:transparent">本文来源gao.dai.ma.com搞@代*码#网</em><a>搞代gaodaima码</a>  // unset掉这个没用的字段        unset($data[$key]);    }elseif(is_scalar($val)) {        $this->_parseType($data,$key);    }}</code>

条件的话,你可以另外再加一个where()的连贯操作

<body>

ThinkPHPLibraryThinkModel.class.php里面有两处跑错误的,一处是条件错误,一个是插入操作字段错误!

具体什么错误无解,对比了3.2.2,改成一样的条件,问题不大。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:thinkphp问题咨询

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址