walkskyer 发表于 2013-3-19 14:04:51

CI使用update时like条件失效的解决办法

今天在用CI编写一个功能时使用update将指定的值加1,
下面是代码 :

public function where($where = false)
    {
      if ($where) {
            $this->where = $where;
      }

      if ($this->where) {
            if (is_array($this->where)) {
                foreach ($this->where as $key => $value) {
                  switch ($key) {
                        case 'start_date':
                            $this->db->where('submit_time >',$value);
                            break;
                            $this->db->like('title', $value);
                            break;
                        default:
                            $this->db->where($key,$value);
                            break;
                  }
                }
            }
            
            if (is_string($this->where)) {
                $this->db->where($where);
            }
      }
    }
public function set($where=false, $data)
    {

      $val = array();
      if (isset($data['export']) && $data) {
            $this->db->set('export',$data['export'],false);
      }
      $this->where($where);
      $this->db->ar_where=array_merge($this->db->ar_where,$this->db->ar_like);//将like条件与where合并
      return $this->db->update($this->_tableName);
    }

看完代码也许你就明了了。我将ar_where与ar_like合并后,update就能正常使用like条件了。
下面是update中生成sql的代码,很明显,它并没有将ar_like作为查询条件。
$sql = $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit);
http://www.zhangweijie.net/?p=839

页: [1]
查看完整版本: CI使用update时like条件失效的解决办法