如何在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 '; ?>

有用!