TIP게시판

제목 [AR] fld = fld + 1
글쓴이 마냐 작성시각 2009/07/30 16:38:49
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 13566   RSS
// 일반 쿼리		
$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));
 다음글 test (3)
 이전글 [설치1단계] APM 세팅과정

댓글

ci세상 / 2009/07/30 18:18:02 / 추천 0

감사합니다.^^

자바개발자들이 CI 엑티브 레코드보고 감탄을 하던데요~~ 전 그냥 써보기만 해서 감사한지도 모르구요;;

일반쿼리에서 안되는 것이 혹시 어떤것들이 있을까요?

외국 위키에 가보면 엑티브 레코드 패치들이 계속 버젼업되는것 같더라구요^^

변종원(웅파) / 2009/07/30 21:14:12 / 추천 0
like, orlike, where절 섞어쓸때 구현이 안되서 $sql ="...."; 로 처리한적이 있습니다.
그때 빼고는 복잡한 조인, 서브쿼리 등등 대부분 엑티브레코드로 사용합니다.
물론 귀찮아서 그냥 쓴적도 있구요. ㅋ
마냐 / 2009/07/31 00:56:03 / 추천 0

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