【问题标题】:Echo query before execution and without execution in codeigniter Active Record在 codeigniter Active Record 中执行和不执行之前的回显查询
【发布时间】:2012-02-19 01:47:41
【问题描述】:

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

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

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

【问题讨论】:

  • 一种简单但可能不太有效的方法是稍微修改查询以进行错误查询,以便系统显示错误以及简单的预期错误并且不会执行.

标签: php mysql codeigniter activerecord


【解决方案1】:

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

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

【讨论】:

  • 谢谢。这仅适用于选择查询吗?没有什么可以代替get()吗?我希望它能够有一个可选的 $database_name 像get()
  • 插入其 $this->_insert() 以更新其 $this->_update() 但这两个需要很少的参数
  • 在最新的 CodeIgniter 版本中,$this->db->_compile_select() 是受保护的,不能被调用。您需要使用$this->db->get_compiled_select()(可能是也可能不是最新的稳定版本,它在他们的开发版本中)。
  • 您还需要改用get_compiled_insertget_compiled_update
  • @smhnaji:我认为_compile_select 在 2.0.3 中仍然有效,但这不是最稳定的。最稳定的版本是 2.1.0,它删除了_compile_select。他们添加了get_compiled_select,但这不是稳定版本,它只是在development version
【解决方案2】:

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

使用

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

会产生

select * from some_table...

就是这样。

【讨论】:

  • 为什么-ve 投票?答案对我来说似乎很完美。最有可能的反对票不是为了气馁,所以缺少的是评论。
  • -ve 投票是因为提问者不想运行实际查询。只想要查询的样子。 last_query() 获取发送到数据库的最后一个查询。
  • 否决票是因为问题明确表示没有 last_query(),最重要的是 - “答案”以“tsc,tsc”开头。态度傲慢,回答错误。真的很难不投反对票。
  • $this->db->last_query() 很高兴看到执行后的查询。 OP 希望在执行之前和不执行它时查看已编译的查询。
  • 操作要求显示 SQL 字符串,而不对数据库运行 sql。您只能在运行 get() 后使用 $this->db->last_query(),它将针对数据库运行查询。
【解决方案3】:

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

哪个运行查询

【讨论】:

    【解决方案4】:

    从 Codeigniter 的第 3 版开始,请参阅 this url 和 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();

    【讨论】:

      【解决方案5】:

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

      获取 SELECT 查询

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

      获取 INSERT 查询

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

      获取更新查询

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

      获取 DELETE 查询

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

      【讨论】:

        【解决方案6】:

        从 CI 3.1.11 下面的代码将帮助你

        $this->db->get_compiled_select()
        

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

        【讨论】:

          猜你喜欢
          • 2011-10-22
          • 1970-01-01
          • 2011-11-18
          • 1970-01-01
          • 1970-01-01
          • 2016-03-15
          • 2020-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多