48

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

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

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

或者一旦你调用它就会发生result_array()

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

4

2 回答 2

92

查询执行发生在所有 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')

运行查询。

看看这个例子

于 2013-04-12T07:38:01.163 回答
2

对我来说,这个save_queries选项被关闭了,

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

参考:无法从 $this->db->last_query(); 得到结果 代码点火器

于 2020-02-20T10:42:14.950 回答