今天在用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);