用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7495|回复: 8
收起左侧

[已解决] 通过Active Record 类执行的语句,怎么显示最后的SQL语句.

[复制链接]
发表于 2008-8-24 18:07:26 | 显示全部楼层 |阅读模式
比如:
$query = $this->db->get('mytable');
怎么让它显示 SELECT * FROM mytable

谢谢了..
发表于 2008-8-25 17:50:50 | 显示全部楼层
我是有两个办法看sql的。
第一,看你的log,看它执行了什么sql.
第二,这个办法是有点变态,要求是对CI核心代码有一定的理解的基础上。
我是这么做的。
你先找到system/database/DB_driver.php
我们先为CI_DB_driver类加一个属性:
class CI_DB_driver{
....
var $sqlstr;

我们再找到function query()
这个函数的最开始处加下这样的一句话:
        $this->sqlstr = $sql;

最后,我们为CI_DB_driver类添加一个方法,位置不限,getSql()
function getSql()
{
     return $this->sqlstr;
}


这样,我们在controller里就可以这样调用了:

$query = $this->db->get('mytable');
//to do something....

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

这样就可以看到你的sql语句了。
发表于 2008-8-26 00:14:03 | 显示全部楼层
$this->db->last_query();
 楼主| 发表于 2008-8-26 08:34:29 | 显示全部楼层
谢谢楼上的...还有楼上的楼上..
发表于 2011-8-8 15:34:39 | 显示全部楼层
如果我要在
$query = $this->db->get('mytable');
这段代码直接获取sql,好像没有办法把!
发表于 2011-8-8 15:41:18 | 显示全部楼层
哈哈 ,在国外的论坛上找到了,用下面的方法
$this->db->_compile_select();
发表于 2011-8-8 16:03:26 | 显示全部楼层
mageguoshi 发表于 2011-8-8 15:41
哈哈 ,在国外的论坛上找到了,用下面的方法
$this->db->_compile_select();

不建议使用非公开 API,这样如果哪个版本的 CI 变化了,而文档上不会体现出来,就可能造成你的程序出错。
发表于 2011-8-9 15:38:14 | 显示全部楼层
那有公开的api获取查询前的sql语句么
发表于 2011-8-9 22:17:27 | 显示全部楼层
回ls,没有

本版积分规则