在 CodeIgniter 1.7 中获取原始 SQL 查询

Posted

技术标签:

【中文标题】在 CodeIgniter 1.7 中获取原始 SQL 查询【英文标题】:Getting raw SQL Queries in CodeIgniter 1.7 【发布时间】:2010-12-03 05:22:09 【问题描述】:

我正在尝试在我的第一个严肃的 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();

感谢您的帮助!

【问题讨论】:

【参考方案1】:

查询运行前:

$this->db->_compile_select(); 

在它运行之后:

$this->db->last_query();

【讨论】:

_compile_select() 在较新版本的 CodeIgniter 中被标记为受保护(可能只是为了与 php4 兼容而之前未声明受保护)。因此,您可以将限制设置为 1 以避免执行大查询,然后调用 last_query(),或者您可以使用反射,但第一个选项更可取。 另外:看起来 get_compiled_select() 将在 CodeIgniter 的未来版本中可用;它已经在 dev 分支中 (github.com/EllisLab/CodeIgniter/blob/develop/system/database/…)。我将该方法复制到 DB_active_rec 并且它工作正常,即使与这个库一起使用:github.com/NTICompass/CodeIgniter-Subqueries【参考方案2】:

当然,我是在发帖 2 分钟后找到的,感谢 Phil Sturgeon。

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

【讨论】:

【参考方案3】:

此外,您可以在控制器中添加以下内容:

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

您会收到查询等等。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

这不太可能产生关于实际运行的查询的准确结果

以上是关于在 CodeIgniter 1.7 中获取原始 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter上传库获取拇指文件名

带有获取参数的codeigniter分页url

CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?

Codeigniter 活动记录类错误与 MySQL 原始查询

Codeigniter 加载页面非常慢

1615 准备好的语句需要在codeigniter中重新准备