我的模型中有一个sql语句,
然后我说$query = $this->db->query($sql, array(fields, fields1);
if ($query) {
return true:
} else {
echo "failed";
return false;
}
我的查询总是失败,如何让php打印发送到我的数据库的确切sql语句?并在我的php视图,页面
上显示答案 0 :(得分:224)
您可以使用:
$this->db->last_query();
"返回最后运行的查询(查询字符串,而不是结果)。"
Reff:https://www.codeigniter.com/userguide3/database/helpers.html
答案 1 :(得分:92)
显示查询字符串:
print_r($this->db->last_query());
显示查询结果:
print_r($query);
Profiler类将显示基准测试结果,您运行的查询以及页面底部的$ _POST数据。 要启用探查器,请在Controller方法的任何位置放置以下行:
$this->output->enable_profiler(TRUE);
分析用户指南: https://www.codeigniter.com/user_guide/general/profiling.html
答案 2 :(得分:38)
您可以显示ActiveRecord生成的SQL:
在查询运行之前:
$this->db->_compile_select();
运行之后:
$this->db->last_query();
答案 3 :(得分:16)
如果您需要对查询进行快速测试,这对我来说很有用
echo $this->db->last_query(); die;
答案 4 :(得分:12)
尝试未成功使用_compiled_select()
或get_compiled_select()
后,我刚刚打印了db
对象,您可以在queries
属性中看到该查询。
亲自尝试:
var_dump( $this->db );
如果您知道只有一个查询,则可以直接打印:
echo $this->db->queries[0];
答案 5 :(得分:9)
你可以在最后使用它。
echo $this->db->last_query();
答案 6 :(得分:8)
有一个新的公共方法get_compiled_select
可以在运行之前打印查询。 _compile_select
现已受到保护,因此无法使用。
echo $this->db->get_compiled_select(); // before $this->db->get();
答案 7 :(得分:2)
last_query()
或get_compiled_select()
都不适合我,因此pedro代码的细微更改对我来说很好。不要在您的构建中包含->get()
,这必须在 - > get()
echo $this->EE->db->_compile_select();
答案 8 :(得分:1)
我尝试@Chumillas的答案和@ chhameed的答案,但它不起作用,因为sql是错误的。所以我找到了新的方法,像这样:
echo $sql; flush(); exit;
之前插入return $sql;
_compile_select
DB_active_rec.php
功能
答案 9 :(得分:0)
我遇到了完全相同的问题并最终找到了解决方案。我的查询运行如下:
$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');
为了显示sql命令,我所要做的就是创建一个变量($ resultstring),其内容与我的查询完全相同,然后回显它,如下所示:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
有效!
答案 10 :(得分:0)
在要打印的查询之后立即添加此行。
示例:
$ query = $ this-> db-> query('SELECT * FROM table WHERE condition');
//添加此行。
var_dump($ this-> db-> last_query());
exit();
或
回显$ this-> db-> last_query();
答案 11 :(得分:0)
您有多种获取查询SQL的方法。
您应使用以下内容:
$sql = $this->db->last_query();
CodeIgnitier没有提供通俗易懂的方法来在执行之前获取SQL,您必须使用特定的方法。
$sql = $this->db->get_compiled_select()
$sql = $this->db->get_compiled_insert()
$sql = $this->db->get_compiled_update()
$sql = $this->db->get_compiled_delete()
答案 12 :(得分:0)
我正在使用xdebug观看带有相应扩展名和CI v2.x的VSCode中的此值。我在监视部分添加了表达式$this->db->last_query()
,并在这些行中添加了xdebugSettings
节点,以便在launch.json中获取非截断值。
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000,
"xdebugSettings": {
"max_data": -1,
"max_children": -1
}
},
运行带有断点的调试器,最后选择我的表达式,然后单击右键>复制值。
答案 13 :(得分:0)
在 CodeIgniter4 中,您可以这样做:
$db = \Config\Database::connect();
// your queries here
$query = $db->getLastQuery();
$sql = $query->getQuery();
echo $sql;
答案 14 :(得分:-1)
使用get_compiled_select()
检索查询而不是替换它
答案 15 :(得分:-2)
我在这里阅读了所有答案,但无法获得
echo $this->db->get_compiled_select();
工作,它给了我一个错误,
从上下文&#39;欢迎&#39;在xx行的控制器中调用受保护的方法CI_DB_active_record :: _ compile_select()
所以我从文件protected
的下一行中删除了\system\database\DB_active_rec.php
并且它有效
protected function _compile_select($select_override = FALSE)