제목 | 10원짜리 팁. 액티브레코드 쿼리문 확인 | ||
---|---|---|---|
글쓴이 | risa | 작성시각 | 2013/05/10 10:20:15 |
|
|||
액티브 레코드로 하다 보면 가끔 헷깔릴때가 있습니다 조건문이 생각과 다르게 나온다거나 하면 답답 하죠. 혹은 내가 쓴 조건이 정말 맞는지 궁금 할때가 있습니다. 아주 간단한 커스텀을 해봅시다. 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
|
변종원(웅파)
/
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]() 함수를 만들었더군요. :) 브랜치로 이미 반영이 되어있는 함수라 업그레이드할 때 손이 덜 가지 않을까 생각됩니다. :) |
http://www.codeigniter-kr.org/user_guide_2.1.0/database/helpers.html
echo $this->db->last_query();