TIP게시판

제목 10원짜리 팁. 액티브레코드 쿼리문 확인
글쓴이 risa 작성시각 2013/05/10 10:20:15
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 21665   RSS
 액티브 레코드로 하다 보면 가끔 헷깔릴때가 있습니다

조건문이 생각과 다르게 나온다거나 하면 답답  하죠.

혹은 내가 쓴 조건이 정말 맞는지 궁금 할때가 있습니다.


아주 간단한 커스텀을 해봅시다.


system -> database -> DB_active_rec.php 를 엽니다.

//일단 해당 함수를 찾습니다.
public function get($table = '', $limit = null, $offset = null)  

// 이렇게 추가 해줍시다.
public function get($table = '', $limit = null, $offset = null,$show_sql = null) 


오호! 메뉴얼에서는

$this->db->get('table_name');

으로 알려줫는데 알고보니 

2번째와 3번째는 limit 관련 이었네요.
2번째 인자가 없으면 자동으로 $this->db->limit(1000); 문을 갖다 붙이는 구조였습니다.

그 밑을 보시면  $sql = $this->_compile_select(); <- 쿼리문을 만들어 가져옵니다.

밑에다가 
 
$sql = $this->_compile_select();
//밑에다가
if($show_sql === TRUE)
  { 
   print_r($sql);
  }

추가 하면 끝.

쿼리를 확인 하고 싶으시면 

$this->db->get('table_name',null,null,true);


여기서 잠깐?! 

$this->db->from('table_name');
$this->db->limit(2);
$this->db->get()>result_array();
이건 어떻게 하나요?

베리 이지.

$this->db->get(null,null,null,true)->result_array();
끗.


목마른자 알아서 우물을 파는 법이네요.
 다음글 mssql(sqlsrv) 시스템드라이버 (rows_af... (2)
 이전글 swfupload 사용시 jpg, gif, png를 o...

댓글

전상민 / 2013/05/10 17:42:14 / 추천 0
아래 헬퍼를 이용했었던 기억이 나네요.
http://www.codeigniter-kr.org/user_guide_2.1.0/database/helpers.html


echo  $this->db->last_query();


변종원(웅파) / 2013/05/10 17:45:18 / 추천 0
$this->output->enable_profiler(true);

index.php의 ENVIRONMENT 상수에 따라 값이 development 이면 true로 production 이면 false로 
처리해 놓으면 편하게 쓸 수 있습니다.
risa / 2013/05/10 18:30:28 / 추천 0
전상민 // 

아 그생각을 못했네요
있는건 알았는데 마지막 한 쿼리 내용? 뭐하러 보는거지? 하고 패스 했는데
생각 해보니 그렇네요. 

웅파//
$this->output->enable_profiler(true); 를 
function __construct(){
//$this->output->enable_profiler(true);     
    }

넣고 필요하면 주석 풀어서 확인! 5원짜리 팁으로 올릴려고 했던 건데!!!

참 좋긴 합니다만 단점은 쿼리문이 많으면 어디서 누가 실행 한건지 약간 생각을 하게 되서

쿼리문에다 주석 한줄씩만 달아두면 더 관리하기 편하긴 하더군요.

단지 저걸 막 쓰기 힘든 이유중 하나는

'너무 많은 정보를 노출' 시키 더군요 ( ..)


오직 개발 서버에서만 쓰는 거면 상관없는데...

노출이 될수 있는 환경이라면 신중해야 할거 같아요.
 
딱히 개발과 상용 서버가 구분이 확연하지 않다면 말이죠.
변종원(웅파) / 2013/05/10 19:02:48 / 추천 0
risa/ 구분이 안되더라도 서비스 되고 있는 서버라면 에러메세지를 모두 막는 것이 맞습니다. (보안상)
그래서 서비스에 올릴 때는 ENVIRONMENT 상수를 무조건 production으로 바꿔야 합니다.

혼용상태라면 특정 아이디로 로그인 했을 때 프로파일러를 볼 수 있게 처리해놓으면 됩니다.
(포럼 소스에 그렇게 해놨습니다. 제가 로그인 했을 때는 프로파일러 작동하도록.)

누구에게나 보이는게 싫다면 조금 수정하여 파이어폭스의 파이어버그에서만 보이도록
해놓은 것이 있습니다. ^^

끝으로... 상민님이나 제가 ci에 있는걸 적어놓은 것은 코어를 손대지 않으려는 의도도 있습니다.
꾸숑 / 2013/05/11 13:44:10 / 추천 0
resa//
좋은 내용이네요^^
다만 전 실력도 부족하지만 가급적 단순 명료를 추구하는 코딩 이라서...
복잡하게 꼬면 저도 생각이 안나는 때가 많더라고요 ㅎㅎ

전 아래 내용들을 사용했었네요....
$this->db->last_query();
$this->output->enable_profiler(true);
config/$config['log_threshold'] = 1;
index.php의 ENVIRONMENT 상수
등을 사용하는데

오늘 글들을 읽으니까 미처 생각못햇던 내용들이 있네요...
관리자로 로그인 했을때만 $this->output->enable_profiler(true); 실행되게 하는것 참 좋습니다.
나중에 false 나 소스 삭제 할것 생각하니 이것도 일이다 라고 생각했었는데...

이래서 선배가 좋은것 같아요 시행착오나 삽질을 대신 해주니까요 ^^ 하하하~~~

모두 사랑해요~~~~♥

한대승(불의회상) / 2013/05/13 16:03:08 / 추천 0
좋은 팁 감사!

하지만 코어를 건드리는건 조금 위험 합니다.
업그레이드시 삽질을 하게되는 부작용이 될 수 있거든요  ^^
꾸숑 / 2013/05/27 20:43:36 / 추천 0
불의회상//
님의 글에 1000% 공감 합니다. ㅎㅎ


전 실력 없어 못 만지네요 ㅋ
Snooey / 2013/06/08 03:20:18 / 추천 0
음, 실제로 github 최신 develop 반영판에서는 저 문제가 이미 해결되어 있습니다.

https://github.com/EllisLab/CodeIgniter/commit/0c147b365a8bb2e584d4f957d4d0761f02bebe56
https://github.com/EllisLab/CodeIgniter/issues/276

$this->db->_compile_[select|insert|update|delete]() 가 private 되는 등 불편해서였는지 
$this->db->_get_compiled_[select|insert|update|delete]() 함수를 만들었더군요. :)

브랜치로 이미 반영이 되어있는 함수라 업그레이드할 때 손이 덜 가지 않을까 생각됩니다. :)