如何在codeigniter模型中打印SQL语句
我在我的模型中有一个sql语句,
我然后说
$query = $this->db->query($sql, array(fields, fields1); if ($query) { return true: } else { echo "failed"; return false; }
我的查询总是失败,我如何让PHP打印准确的SQL语句被发送到我的数据库? 并显示在我的PHP视图,页面上
print_r($query);
您也可以使用(在视图中),您将看到SQL语句:
$this->output->enable_profiler(TRUE);
分析用户指南: http : //ellislab.com/codeigniter/user-guide/general/profiling.html
你可以使用这个:
$this->db->last_query();
“返回运行的最后一个查询(查询string,而不是结果)。”
注意: https ://www.codeigniter.com/userguide3/database/helpers.html
你可以显示ActiveRecord生成的SQL:
在查询运行之前:
$this->db->_compile_select();
运行后:
$this->db->last_query();
如果你需要对你的查询进行快速testing,这对我来说非常有用
echo $this->db->last_query(); die;
尝试没有成功使用_compiled_select()
或get_compiled_select()
我只是打印db
对象,你可以在queries
属性中看到那里的queries
。
自己尝试一下:
var_dump( $this->db );
如果你知道你只有一个查询,你可以直接打印它:
echo $this->db->queries[0];
你可以在最后使用这个
echo $this->db->last_query();
有一个新的公共方法get_compiled_select
可以在运行之前打印查询。 _compile_select
现在被保护,因此不能使用。
echo $this->db->get_compiled_select(); // before $this->db->get();
last_query()
或者get_compiled_select()
对我来说都last_query()
,所以pedro的代码略微改变对我来说工作得很好。 不要在你的构build中包含->get()
,这必须在 – > get()
echo $this->EE->db->_compile_select();
我尝试@Chumillas的答案和@ chhameed的答案,但它不工作,因为SQL是错的。所以我find了新的方法, 像这样:
- 插入
echo $sql; flush(); exit;
echo $sql; flush(); exit;
进入之前return $sql;
_compile_select
函数
我在这里阅读所有答案,但不能得到
echo $this->db->get_compiled_select();
工作,它给了我错误,
调用受保护的方法CI_DB_active_record :: _ compile_select()从上下文'Welcome'in控制器上线xx
所以我从文件\system\database\DB_active_rec.php
删除了protected
下面的行,它的工作
protected function _compile_select($select_override = FALSE)
我有完全相同的问题,最终find了解决scheme。 我的查询运行如下:
$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');
为了显示sql命令,我所要做的就是创build一个与我的查询完全相同的内容的variables($ resultstring),然后像下面这样回显: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
有用!