Php 在CodeIgniter 1.7中获取原始SQL查询

Php 在CodeIgniter 1.7中获取原始SQL查询,php,codeigniter,Php,Codeigniter,我试图在我的第一个严肃的CodeIgniter应用程序中调试一些代码,但我似乎找不到哪里可以简单地获得我的ActiveRecord代码刚刚生成的原始SQL $where = 'DAY(`datetime_start`) = '. date('d',$day) .' AND '; $where .= 'MONTH(`datetime_start`) = '. date('m',$day) .''; $this->db->from('events')->

我试图在我的第一个严肃的CodeIgniter应用程序中调试一些代码,但我似乎找不到哪里可以简单地获得我的ActiveRecord代码刚刚生成的原始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();

谢谢你的帮助

当然,我是在发帖2分钟后发现的,承蒙您的好意


此外,您还可以将以下内容放入控制器中:

$this->output->enable_profiler(TRUE);
您将获得查询和更多信息。

在查询运行之前:

$this->db->_compile_select(); 
在它运行之后:

$this->db->last_query();

在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 );
}

对于任何发现这篇旧文章并想知道最新v3中的内容的人,函数是$this->db->get_compiled_select()。

_compile_select()在更新版本的CodeIgniter中被标记为受保护(可能只是为了PHP4兼容性,它以前没有被声明为受保护)。因此,您可以将限制设置为1以避免执行大型查询,然后调用last_query(),或者您可以使用反射,但第一个选项更可取;它已经在dev分支()中。我将该方法复制到DB_active_rec,它工作得很好,即使与此库结合使用:这不太可能产生关于实际运行的查询的准确结果
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 );
}