riyao 发表于 2008-8-24 18:07:26

通过Active Record 类执行的语句,怎么显示最后的SQL语句.

比如:
$query = $this->db->get('mytable');
怎么让它显示 SELECT * FROM mytable

谢谢了..

itlong 发表于 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语句了。

Hex 发表于 2008-8-26 00:14:03

$this->db->last_query();

riyao 发表于 2008-8-26 08:34:29

谢谢楼上的...还有楼上的楼上..

mageguoshi 发表于 2011-8-8 15:34:39

如果我要在
$query = $this->db->get('mytable');
这段代码直接获取sql,好像没有办法把!

mageguoshi 发表于 2011-8-8 15:41:18

哈哈 ,在国外的论坛上找到了,用下面的方法
$this->db->_compile_select();

Hex 发表于 2011-8-8 16:03:26

mageguoshi 发表于 2011-8-8 15:41 static/image/common/back.gif
哈哈 ,在国外的论坛上找到了,用下面的方法
$this->db->_compile_select();

不建议使用非公开 API,这样如果哪个版本的 CI 变化了,而文档上不会体现出来,就可能造成你的程序出错。

mageguoshi 发表于 2011-8-9 15:38:14

那有公开的api获取查询前的sql语句么

visvoy 发表于 2011-8-9 22:17:27

回ls,没有
页: [1]
查看完整版本: 通过Active Record 类执行的语句,怎么显示最后的SQL语句.