执行前的Echo查询,而不在codeigniter Active Record中执行

时间:2012-01-25 20:54:08

标签: php mysql codeigniter activerecord

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

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

我希望有一个类似$this->db->echo_query_string($table_name = '');的名称的方法完全像 $this->db->get($table_name = ''); 但唯一的区别是 {{ 1}}执行代码,但get()只回显查询字符串而不执行

6 个答案:

答案 0 :(得分:25)

您可以通过以下任一功能

查看已编译的查询
/* SELECT */ $this->db->_compile_select();
/* INSERT */ $this->db->_insert();
/* UPDATE */ $this->db->_update();

答案 1 :(得分:20)

您无需更改codeigniter中的任何文件,因为它已经提供了一种方法来执行此操作。

使用

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

将产生

select * from some_table...

就是这样。

答案 2 :(得分:10)

我在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()

哪个运行查询

答案 3 :(得分:3)

自Codeigniter第3版起,请参阅this网址以及this

  • 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();

答案 4 :(得分:0)

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

获取SELECT查询

$sql = $this->db->get_compiled_select()

获取INSERT查询

$sql = $this->db->get_compiled_insert()

获取UPDATE查询

$sql = $this->db->get_compiled_update()

获取DELETE查询

$sql = $this->db->get_compiled_delete()

答案 5 :(得分:0)

来自 CI 3.1.11 以下代码将帮助您

$this->db->get_compiled_select()

更多详情请访问 https://codeigniter.com/userguide3/database/query_builder.html#selecting-data