2009-10-02 12 views
24

Próbuję debugować kod w mojej pierwszej poważnej aplikacji CodeIgniter i nie mogę znaleźć gdzie mogę po prostu uzyskać surowego kodu SQL, który właśnie wygenerował mój kod ActiveRecord.Uzyskiwanie surowych zapytań SQL w CodeIgniter 1.7

$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(); 

Dzięki za pomoc!

Odpowiedz

41

Przed kwerenda działa:

$this->db->_compile_select(); 

A po jego uruchomieniu:

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

_compile_select() jest oznaczony jako chroniony w nowszych wersjach CodeIgniter (prawdopodobnie nie był wcześniej zadeklarowany jako chroniony przed kompatybilnością z PHP4). Więc możesz ustawić limit na 1, aby uniknąć wykonywania dużego zapytania, a następnie wywołać last_query(), lub możesz użyć refleksji, ale pierwsza opcja jest lepsza. –

+0

Ponadto: Wygląda na to, że get_compiled_select() będzie dostępny w przyszłej wersji CodeIgniter; jest już w gałęzi dev (https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_query_builder.php). Skopiowałem tę metodę do DB_active_rec i działało dobrze, nawet w połączeniu z tą biblioteką: https://github.com/NTICompass/CodeIgniter-Subqueries –

8

Oczywiście znalazłem go 2 minuty po wysłaniu, dzięki uprzejmości Phil Sturgeon.

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

Ponadto, można umieścić następujące w kontrolerze:

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

Dostaniesz zapytań i wiele więcej.

+0

Bardzo mi to pomaga ... mnóstwo podziękowań :) –

-2

Można zrobić coś podobnego do następnej wersji CI jest zwolniony

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

Jest to mało prawdopodobne, aby uzyskać dokładne wyniki co do tego, które zapytanie faktycznie jest uruchamiane – Matthew

0

Dla każdego znajdowanie tego starego postu i zastanawianie się, co to jest w najnowszym v3, funkcja to $ this-> db-> get_compiled_select().