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 子句的查询