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,如若转载,请注明出处:https://blib.cn/16082.html

(0)
上一篇 2020年4月9日 下午4:22
下一篇 2020年5月6日 下午2:34

相关推荐

发表评论

您的电子邮箱地址不会被公开。

评论列表(1条)

  • admin
    admin 2020年4月28日 上午9:11

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