2009-10-02 2 views
24

첫 번째 심각한 CodeIgniter 앱에서 일부 코드를 디버깅하려고하는데 방금 생성 한 원시 SQL을 어디에서 얻을 수 있는지 찾을 수 없습니다.CodeIgniter 1.7의 원시 SQL 쿼리 얻기

$where = 'DAY(`datetime_start`) = '. date('d',$day) .' AND '; 
    $where .= 'MONTH(`datetime_start`) = '. date('m',$day) .''; 

    $this->db->from('events')->where($where); 
    $result = $this->db->get(); 

감사합니다.

답변

41

는 쿼리가 실행되기 전에 사람들을위한

$this->db->last_query(); 
+2

_compile_select()는 CodeIgniter의 최신 버전 (PHP4와 호환되기 전에는 보호되지 않았을 가능성이 높음)으로 보호 된 것으로 표시되어 있습니다. 따라서 큰 쿼리를 실행하지 않도록 제한을 1로 설정 한 다음 last_query()를 호출하거나 리플렉션을 사용할 수 있지만 첫 번째 옵션이 더 좋습니다. –

+0

또한 get_compiled_select()는 차후 버전의 CodeIgniter에서 사용할 수 있습니다. 이미 dev 브랜치 (https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_query_builder.php)에있다. 그 방법을 DB_active_rec에 복사했는데,이 라이브러리와 함께조차도 정상적으로 작동했습니다 : https://github.com/NTICompass/CodeIgniter-Subqueries –

8

물론 게시 후 2 분이 지났습니다. Phil Sturgeon의 호의를 보였습니다.

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

또한, 당신은 컨트롤러에서 다음을 넣을 수 있습니다 :

$this->output->enable_profiler(TRUE); 

당신은 쿼리 및 더 많은 것을 얻을 것이다.

$this->db->_compile_select(); 

을 그리고 실행 후 :

+0

대단히 감사합니다. :) –

-2
당신은 CI의 다음 버전 때까지 이런 식으로 뭔가를 할 수

이 출시

private function get_query_string() 
{ 
    return 'SELECT ' . 
      implode(' , ' , $this->db->ar_select) . 
      ' FROM ' . 
      implode(' , ' , $this->db->ar_from) . 
      (count($this->db->ar_where) ? ' WHERE ' : '') . 
      implode(' ' , $this->db->ar_where); 
} 
+1

어떤 쿼리가 실제로 실행되고 있는지에 대한 정확한 결과를 얻지는 않습니다. – Matthew

0

이 오래된 게시물을 찾고 이것은 무엇이 최신 v3에 있는지 궁금해합니다.이 함수는 $ this-> db-> get_compiled_select()입니다.