codeigniter 活动记录,生成,但不执行查询

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

echo "$this->db->last_query()" 怎么样; ? 我正在尝试获取 SQL 语句而不执行查询... 【参考方案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()?

【讨论】:

以上是关于codeigniter 活动记录,生成,但不执行查询的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter - 如果新的或更新的重复记录则插入活动记录

codeigniter 活动记录获取查询和不带 LIMIT 子句的查询

Codeigniter 活动记录查询

活动记录 CodeIgniter 2 中的这个查询有啥问题?

Codeigniter 活动记录 - 插入点列

CodeIgniter 活动记录 +1