在 codeigniter Active Record 中执行和不执行之前的回显查询
Posted
技术标签:
【中文标题】在 codeigniter Active Record 中执行和不执行之前的回显查询【英文标题】:Echo query before execution and without execution in codeigniter Active Record 【发布时间】:2012-02-19 01:47:41 【问题描述】:我正在寻找一种方法来查看生成的查询字符串,但不执行它。
请注意,之前没有执行过查询。 (我不要$this->db->last_query();
)
我希望有一个名称像 $this->db->echo_query_string($table_name = '');
的方法可以使用 完全像 $this->db->get($table_name = '');
但唯一的区别是 get()
执行代码, 但echo_query_string()
只是回显查询字符串不执行。
【问题讨论】:
一种简单但可能不太有效的方法是稍微修改查询以进行错误查询,以便系统显示错误以及简单的预期错误并且不会执行. 【参考方案1】:您可以通过这两个函数中的任何一个查看编译后的查询
/* SELECT */ $this->db->_compile_select();
/* INSERT */ $this->db->_insert();
/* UPDATE */ $this->db->_update();
【讨论】:
谢谢。这仅适用于选择查询吗?没有什么可以代替get()
吗?我希望它能够有一个可选的 $database_name 像get()
插入其 $this->_insert() 以更新其 $this->_update() 但这两个需要很少的参数
在最新的 CodeIgniter 版本中,$this->db->_compile_select()
是受保护的,不能被调用。您需要使用$this->db->get_compiled_select()
(可能是也可能不是最新的稳定版本,它在他们的开发版本中)。
您还需要改用get_compiled_insert
和get_compiled_update
。
@smhnaji:我认为_compile_select
在 2.0.3 中仍然有效,但这不是最稳定的。最稳定的版本是 2.1.0,它删除了_compile_select
。他们添加了get_compiled_select
,但这不是稳定版本,它只是在development version。【参考方案2】:
您无需更改 codeigniter 中的任何文件,因为它已经提供了执行此操作的方法。
使用
echo $this->db->last_query();
会产生
select * from some_table...
就是这样。
【讨论】:
为什么-ve 投票?答案对我来说似乎很完美。最有可能的反对票不是为了气馁,所以缺少的是评论。 -ve 投票是因为提问者不想运行实际查询。只想要查询的样子。 last_query() 获取发送到数据库的最后一个查询。 否决票是因为问题明确表示没有 last_query(),最重要的是 - “答案”以“tsc,tsc”开头。态度傲慢,回答错误。真的很难不投反对票。$this->db->last_query()
很高兴看到执行后的查询。 OP 希望在执行之前和不执行它时查看已编译的查询。
操作要求显示 SQL 字符串,而不对数据库运行 sql。您只能在运行 get() 后使用 $this->db->last_query(),它将针对数据库运行查询。【参考方案3】:
我在 DB_active_rec.php 中添加了这个小方法
function return_query()
return $this->_compile_select();
用法
$this->db->select('id,user_name')->from('user')->where('id',1);
$string = $this->db->return_query();
echo $string;
结果
SELECT `id`, `user_name` FROM (`user`) WHERE `id` = 1
这样你就一定会用到
$this->db->from()
代替
$this->db->get()
哪个运行查询
【讨论】:
【参考方案4】:从 Codeigniter 的第 3 版开始,请参阅 this url 和 this。
echo $this->db->update_string();
或 echo $this->db->get_compiled_update();
echo $this->db->insert_string();
或 $this->db->get_compiled_insert();
echo $this->db->get_compiled_delete();
echo $this->db->get_compiled_select();
【讨论】:
【参考方案5】:您可以使用一些公共方法来获取 SQL 查询
获取 SELECT 查询
$sql = $this->db->get_compiled_select();
获取 INSERT 查询
$sql = $this->db->get_compiled_insert();
获取更新查询
$sql = $this->db->get_compiled_update();
获取 DELETE 查询
$sql = $this->db->get_compiled_delete();
【讨论】:
【参考方案6】:从 CI 3.1.11 下面的代码将帮助你
$this->db->get_compiled_select()
更多详情请访问https://codeigniter.com/userguide3/database/query_builder.html#selecting-data
【讨论】:
以上是关于在 codeigniter Active Record 中执行和不执行之前的回显查询的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter Active Record 与常规查询
CodeIgniter Active Record 中的 SQL 注释?
Where 子句 CodeIgniter 中的 Active Record 问题
CodeIgniter/PHP Active Record 不会增加整数