Codeigniter: $this->db->last_query(); 执行查询吗?

48

在这个 CodeIgniter Active Record 语句中,查询的执行是否发生在 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();是一种可靠的获取查询字符串的方法吗?

3个回答

92

查询执行发生在所有的获取方法上,例如

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

last_query变量包含最后一次运行的查询

$this->db->last_query();

如果你想在不执行的情况下获取查询字符串,你需要做以下操作。前往系统/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')

运行这个查询。

看看这个例子


欢迎和没问题!他们将在新版本的CI中添加这两种方法(以及其他一些用于插入、更新和删除等操作),因此我们将不必再进行黑客攻击。 - Muhammad Raheel
@raheelshan 这个简直救了我的命。你有关于为什么他们将这些函数设为受保护的信息吗?https://dev59.com/4Gox5IYBdhLWcg3wYzfX - mirza
请不要调用任何带有下划线 _ 的方法,因为它们表示私有访问(不允许从外部访问)。这不是解决方案,而是在以后更新时会出现问题(当他们向其方法添加真正的访问级别时)。 - Roland
我认为以 _ 开头的方法不会造成任何问题。 - Muhammad Zaman

4

0

对我来说,它完美地运作:源代码 披露:这个源代码网站属于我,我也在我的网站上分享解决方案...

public function index()
{
    $db = \Config\Database::connect();
    $heroesCount = $db->table('products')->countAll();
    echo $db->getLastQuery();
    exit;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接