【问题标题】:codeigniter active record, generate, but do not execute querycodeigniter 活动记录,生成,但不执行查询
【发布时间】:2011-07-04 01:49:10
【问题描述】:

我正在开发一个库,该库需要将 sql 查询作为字符串输入以完成其工作。

我正在使用 CodeIgniter 及其数据库类的活动记录实现。

我知道我可以像这样回显 SQL 语句……但我只想生成这个查询,而不是执行它。

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

任何帮助实现这一点都会很棒!

【问题讨论】:

  • echo "{$this->db->last_query()}" 怎么样; ?
  • 我正在尝试获取 SQL 语句而不执行查询...

标签: php codeigniter activerecord


【解决方案1】:

只需一点技巧,您就可以转到 system/DB_active_rec.php 并删除受保护的关键字形式 _compile_select 方法,现在就

return $this->db->_compile_select();

也可以使用$this->db->from('table');

而不是get() 因为get会执行查询 这是一个例子

function index(){
    $this->db->select('blah blah');
    $this->db->from('table');
    $string = $this->db->_compile_select();
    return $string;
}

【讨论】:

    【解决方案2】:

    取决于它是哪种类型的查询。 insert 和 update 具有允许您执行此操作的方法。

    $this->db->set('foo', $bar);
    $this->db->update_string('table'); // UPDATE table SET foo = "bar"
    

    【讨论】:

    • 我只希望生成选择查询。
    • 这应该是公认的答案!!干得好,从来不知道这个!
    【解决方案3】:

    您使用的 last_query() 函数返回查询字符串,它不执行它。尝试将函数返回分配给一个变量以在您的库中使用。

    $str = $this->db->last_query();
    

    【讨论】:

    • 这将首先执行查询然后获取字符串 sql,而不是用户 get_compiled_select/update/insert ...
    • 这是查询执行后的返回者...所以答案不对
    【解决方案4】:

    我不知道这是否安全,但 db 对象将其查询存储在查询属性中,因此您可以通过以下方式获取它:

    $this->db->queries
    

    返回一个查询数组。

    【讨论】:

    • 不应像这样访问属性,因为当我们开始使用 PHP5 化范围时,这正是可能变成私有属性的东西。但是,是的,它可能会起作用。
    • @Phil,有没有办法让我在不执行查询的情况下获取 sql 语句?
    • 回答而不是评论,哎呀。
    【解决方案5】:

    从 Codeigniter 3 开始,您可以使用 get_compiled_select()

    要在 CI3 之前使用它,请参阅Is there a function like _compile_select or get_compiled_select()?

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多