2009-10-02 18 views
24

Estoy intentando depurar algún código en mi primera aplicación CodeIgniter seria y no puedo encontrar dónde puedo obtener simplemente el SQL sin procesar que acaba de generar mi código ActiveRecord.Obteniendo consultas SQL sin procesar en 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(); 

¡Gracias por la ayuda!

Respuesta

41

Antes de la consulta se ejecuta:

$this->db->_compile_select(); 

Y después de que se ejecute:

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

_compile_select() está marcado como protegido en las versiones más recientes de CodeIgniter (es probable que no haya sido declarado protegido antes para compatibilidad con PHP4). Entonces, puede establecer el límite en 1 para evitar ejecutar una consulta grande y luego llamar a last_query(), o puede usar el reflejo, pero la primera opción es preferible. –

+0

También: Parece que get_compiled_select() estará disponible en una versión futura de CodeIgniter; ya está en la rama de desarrollo (https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_query_builder.php). Copié ese método a DB_active_rec y funcionó bien, incluso en conjunto con esta biblioteca: https://github.com/NTICompass/CodeIgniter-Subqueries –

8

Por supuesto, lo encontré 2 minutos después de la publicación, cortesía de Phil Sturgeon.

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

Además, se puede poner lo siguiente en su controlador:

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

Usted obtendrá consultas y mucho más.

+0

muy útil para mí .... un montón de agradecimientos :) –

-2

Usted puede hacer algo como esto hasta la próxima versión de CI se libera

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

Es muy poco probable que arroje resultados precisos sobre qué consulta se está ejecutando en realidad. – Matthew

0

Para cualquier persona encontrando esta publicación anterior y preguntándome qué es esto en la última v3, la función es $ this-> db-> get_compiled_select().

Cuestiones relacionadas