// 일반 쿼리
$wr_hit = $this->db->protect_identifiers('wr_hit');
$sql = 'update K_write set '.$wr_hit.' = '.$wr_hit.' + 1 where bo_table = ? and wr_id = ?';
$this->db->query($sql, array($bo_table, $wr_id));
// Active Record
$this->db->set('wr_hit', 'wr_hit + 1', false);
$this->db->update('K_write', null, array('bo_table' => $bo_table, 'wr_id' => $wr_id));select ... from where fld = 1 and (fld = 2 or fld = 3) and fld = 4
위와 같이 () 로 묶는 쿼리를 할때 잘 안되더군요.
or_where을 하면 이렇게 됩니다.
select ... from where fld = 1 and fld = 2 or fld = 3 and fld = 4
그럴때는
$where = " fld = 1 and (fld = 2 or fld = 3) and fld = 4 ";
$this->db->where($where, null, false);
해버리면 됩니다. ㅡ_
Active Record 는 필드나 테이블명을 백틱(`)으로 감싸는 본능(?)이 있습니다.
그걸 false 해주는 거죠. 그럼 끝.
왠만한건 false 옵션 주면 다 해결됩니다.
보안을 생각하여 식별자 보호와 이스케이프를 수동으로 해야하는 귀차니즘이..
$this->db->protect_identifiers
$this->db->escape
감사합니다.^^
자바개발자들이 CI 엑티브 레코드보고 감탄을 하던데요~~ 전 그냥 써보기만 해서 감사한지도 모르구요;;
일반쿼리에서 안되는 것이 혹시 어떤것들이 있을까요?
외국 위키에 가보면 엑티브 레코드 패치들이 계속 버젼업되는것 같더라구요^^