TP3.2.3 升级到3.2.4时 where 不能过滤无用字段问题

因项目较老一直是一TP3系列的框架,没时间升级到TP5/6,就只能小版本升级一下,当升级到3.2.4时,系统出现了错误,提示数据库没有对应字段,可能是后期修改过数据库,删除或修改过字段,而代码没有进行修改,3.2.3时没有错误,经过排查,发现3.2.4 的 Model.class.php 文件被修改过,与3.2.3 对比 _parseOptions 方法删除了一些代码,只需在if语句后加上3.2.3 中对应的代码即可,添加完如下,

foreach ($options['where'] as $key => $val) {
  $key = trim($key);
    if (in_array($key, $fields, true)) {
      if (is_scalar($val)) {
        $this->_parseType($options['where'], $key);
      }
    }elseif(!is_numeric($key) && '_' != substr($key,0,1) && false === strpos($key,'.') && false === strpos($key,'(') && false === strpos($key,'|') && false === strpos($key,'&')){
     if(!empty($this->options['strict'])){
       E(L('_ERROR_QUERY_EXPRESS_').':['.$key.'=>'.$val.']');
     } 
     unset($options['where'][$key]);
    }
}

 

本文收集于网络,仅供技术交流使用,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容, 欢迎发送邮件至 admin@webse.cn 举报,一经查实,本站将立刻删除涉嫌侵权内容,本文链接:https://webse.cn/16082.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2020-04-09 16:22
下一篇 2020-05-06 14:34

相关推荐

发表回复

登录后才能评论

评论列表(1条)

  • admin
    admin 2020-04-28 09:11

    另一点就是,tp3.2.4版本Mysql.class.php 增加了字段和表名的处理 ,parseKey方法中,增加后count()方法会出错,因为他给count(*),变成了count(`*`),以至于查询时提示找不到字段