【问题标题】:Codeigniter: does $this->db->last_query(); execute a query?Codeigniter:做 $this->db->last_query();执行查询?
【发布时间】:2013-04-03 22:40:44
【问题描述】:

查询执行是否发生在以下 codeigniter 活动记录语句的 get_where() 子句中?

$this->db->select('*');
    $q = $this->db->get_where('Contacts', array('id' => $contact_id));

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

或者当您拨打result_array() 时会发生这种情况?

$this->db->last_query(); 是获取查询字符串的可靠方法。

【问题讨论】:

    标签: codeigniter activerecord codeigniter-2


    【解决方案1】:

    查询执行发生在所有 get 方法上,例如

    $this->db->get('table_name');
    $this->db->get_where('table_name',$array);
    

    虽然 last_query 包含上次运行的查询

    $this->db->last_query();
    

    如果你想在不执行的情况下获取查询字符串,你必须这样做。 转到 system/database/DB_active_rec.php 从这些函数中删除 public 或 protected 关键字

    public function _compile_select($select_override = FALSE)
    public function _reset_select()
    

    现在您可以编写查询并将其放入变量中

    $this->db->select('trans_id');
    $this->db->from('myTable');
    $this->db->where('code','B');
    $subQuery = $this->db->_compile_select();
    

    现在重置查询,因此如果您想编写另一个查询,该对象将被清除。

    $this->db->_reset_select();
    

    事情就完成了。干杯!!! 注意:使用这种方式时必须使用

    $this->db->from('myTable')
    

    而不是

    $this->db->get('myTable')
    

    运行查询。

    Take a look at this example

    【讨论】:

    • 欢迎光临,没问题!他们将在新版本的 CI 中添加这两种方法(以及其他一些用于插入、更新和删除等),因此我们不必破解它。
    • @raheelshan 这刚刚救了我的命。你有任何关于他们为什么保护这个功能的信息吗? stackoverflow.com/questions/9232316/…
    • 请不要使用_ 调用任何方法,这意味着私人访问(不是来自外部)。这不是解决方案,而是以后更新的问题(当他们向他们的方法添加真正的访问级别时)。
    • 我不认为以 _ 开头的方法会产生任何问题。
    【解决方案2】:

    对我来说,save_queries 选项已关闭,

    $this->db->save_queries = TRUE; //Turn ON save_queries for temporary use.
    $str = $this->db->last_query();
    echo $str;
    

    参考:Can't get result from $this->db->last_query(); codeigniter

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 2014-04-27
      • 2023-03-27
      • 2013-05-31
      • 1970-01-01
      相关资源
      最近更新 更多