Php 在codeigniter活动记录中执行前和未执行时回显查询

Php 在codeigniter活动记录中执行前和未执行时回显查询,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我正在寻找一种方法来查看生成的查询字符串,但不执行它 请注意,该查询以前从未执行过。(我不想要$this->db->last_query();) 我希望有一个名为$this->db->echo\u query\u string($table\u name='')的方法与$this->db->get($table_name='')完全相同但唯一的区别是get()执行代码,而echo\u query\u string()只回显查询字符串而不执行您可以通过这两个函数中的任何一个查看编译后的查询 /*

我正在寻找一种方法来查看生成的查询字符串,但不执行它

请注意,该查询以前从未执行过。(我不想要
$this->db->last_query();


我希望有一个名为
$this->db->echo\u query\u string($table\u name='')的方法
$this->db->get($table_name='')完全相同
但唯一的区别是
get()
执行代码,而
echo\u query\u string()
只回显查询字符串而不执行

您可以通过这两个函数中的任何一个查看编译后的查询

/* SELECT */ $this->db->_compile_select();
/* INSERT */ $this->db->_insert();
/* UPDATE */ $this->db->_update();

我在DB_active_rec.php中添加了这个小方法

function return_query()
{
    return $this->_compile_select();
}
用法

$this->db->select('id,user_name')->from('user')->where('id',1);

$string =   $this->db->return_query();
echo $string;
结果

SELECT `id`, `user_name` FROM (`user`) WHERE `id` = 1
这样你就一定要用

$this->db->from()
而不是

$this->db->get()

运行查询的

您不需要更改codeigniter中的任何文件,因为它已经提供了执行此操作的方法

使用

echo$this->db->last_query()

将产生

从一些表格中选择*。


这就是它。

从Codeigniter的第3版开始,请参考url和

  • echo$this->db->update_string()
    echo$this->db->get_compiled_update()
  • echo$this->db->insert_string()
    $this->db->get_compiled_insert()
  • echo$this->db->get_compiled_delete()
  • echo$this->db->get_compiled_select()

您可以使用一些公共方法来获取SQL查询

获取一个SELECT查询 获取插入查询 获取更新查询 获取删除查询
从CI 3.1.11中,以下代码将对您有所帮助

$this->db->get_compiled_select()

更多详情请访问

谢谢。这是否仅适用于select查询?难道没有什么东西可以代替
get()
?我希望它能够有一个可选的$database\u名称,比如插入它的$this->insert(),更新它的$this->\u update(),比如
get()
,但是这两个都需要一些参数,因为最新的CodeIgniter版本
$this->db->\u compile\u select()
是受保护的,无法调用。你需要使用
$this->db->get\u compiled\u select()
(它可能在最新的稳定版本中,也在他们的开发版本中)。你还需要使用
get\u compiled\u insert
get\u compiled\u update
。@smhnaji:我认为
\u compile\u select
在2.0.3中仍然有效,但这不是最稳定的。最稳定的版本是2.1.0,它删除了
\u compile\u select
。他们添加了
get\u compiled\u select
,但这不在稳定版本中,只在.why-ve投票中?我觉得这个答案很完美。最有可能的是,否决票并不是为了泄气,所以缺少的是评论。-ve投票,因为提问者不想运行实际的查询。只是想要查询的样子。last_query()获取发送给DB的最后一个查询。否决票是因为问题明确表示没有最后一个查询(),最重要的是,“答案”以“tsc,tsc”开头。态度傲慢,回答错误。真的很难不否决投票。
$this->db->last\u query()
很高兴在执行后看到查询。OP希望在执行之前和不执行之前查看已编译的查询。OP要求显示SQL字符串,而不对数据库运行SQL。在运行get()之后,您只能使用$this->db->last\u query(),这将对数据库运行查询。我要做的一个简单但可能不是很有效的方法是稍微修改查询以生成错误的查询,这样系统将显示错误以及简单的预期错误&它将不会执行。
$sql = $this->db->get_compiled_insert();
$sql = $this->db->get_compiled_update();
$sql = $this->db->get_compiled_delete();
$this->db->get_compiled_select()