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

Moh*_*aji 24 php mysql activerecord codeigniter

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

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

我希望有一个方法,其名称就像$this->db->echo_query_string($table_name = '');使用完全相同 $this->db->get($table_name = ''); 但只 get()执行代码,但echo_query_string()只是在不执行的情况下回显查询字符串.

Ste*_*wie 28

您可以通过以下任一功能查看已编译的查询

/* SELECT */ $this->db->_compile_select();
/* INSERT */ $this->db->_insert();
/* UPDATE */ $this->db->_update();
Run Code Online (Sandbox Code Playgroud)

  • 在最新的CodeIgniter版本中,$ this-> db - > _ compile_select()`受保护,无法调用.你需要使用`$ this-> db-> get_compiled_select()`(可能是或不是最新的稳定版本,它在他们的开发版本中). (20认同)
  • 您还需要使用`get_compiled_insert`和`get_compiled_update`. (2认同)

小智 19

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

运用

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

会产生

select * from some_table...

就是这样.

  • -ve votes因为提问者不想运行实际查询.只想要查询的样子.last_query()获取发送给DB的最后一个查询. (16认同)
  • 向下投票是因为问题明确地说没有last_query(),并且最重要的是 - "回答"以"tsc,tsc"开头.傲慢的态度,错误的答案.真的,很难不投票. (13认同)
  • `$ this-> db-> last_query()`很高兴看到执行后的查询.OP希望在执行之前和之后查看已编译的查询. (2认同)

Muh*_*eel 11

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

function return_query()
{
    return $this->_compile_select();
}
Run Code Online (Sandbox Code Playgroud)

用法

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

$string =   $this->db->return_query();
echo $string;
Run Code Online (Sandbox Code Playgroud)

结果

SELECT `id`, `user_name` FROM (`user`) WHERE `id` = 1
Run Code Online (Sandbox Code Playgroud)

通过这种方式你必然会使用

$this->db->from()
Run Code Online (Sandbox Code Playgroud)

代替

$this->db->get()
Run Code Online (Sandbox Code Playgroud)

哪个运行查询


Sam*_*zon 5

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

获取 SELECT 查询

$sql = $this->db->get_compiled_select();
Run Code Online (Sandbox Code Playgroud)

获取 INSERT 查询

$sql = $this->db->get_compiled_insert();
Run Code Online (Sandbox Code Playgroud)

获取更新查询

$sql = $this->db->get_compiled_update();
Run Code Online (Sandbox Code Playgroud)

获取 DELETE 查询

$sql = $this->db->get_compiled_delete();
Run Code Online (Sandbox Code Playgroud)