如何在 codeigniter 模型中打印 SQL 语句

在我的模型中有一个 sql 语句,

然后我说

$query = $this->db->query($sql, array(fields, fields1);


if ($query) {
return true:
} else {
echo "failed";
return false;
}

我的查询总是失败,我如何让 php 打印准确的 sql 语句发送到我的数据库?并显示在我的 PHP 视图,页面

358438 次浏览

显示查询字符串:

print_r($this->db->last_query());

显示查询结果:

print_r($query);

Profiler Class 将在页面底部显示基准测试结果、已运行的查询和 $_ POST 数据。 若要启用探查器,请在 Controller 方法中的任何位置放置以下行:

$this->output->enable_profiler(TRUE);

分析用户指南: https://www.codeigniter.com/user_guide/general/profiling.html

您可以显示 ActiveRecord 生成的 SQL:

运行查询之前:

$this->db->_compile_select();

在它运行之后:

$this->db->last_query();

你可以用这个:

$this->db->last_query();

”返回上次运行的查询(查询字符串,而不是结果)

参考文献: https://www.codeigniter.com/userguide3/database/helpers.html

有一个新的公共方法 get_compiled_select可以在运行查询之前打印它。_compile_select现在受到保护,因此不能使用。

echo $this->db->get_compiled_select(); // before $this->db->get();

last_query()get_compiled_select()都不适合我,所以对 Pedro 的代码稍作修改就可以了。不要在构建中包含 ->get(),这必须在-> get ()之前

 echo $this->EE->db->_compile_select();

I try to @Chumillas's answer and @chhameed's answer, but it not work,because the sql is wrong.So I found new approach,像这样:

  • return $sql;之前插入 echo $sql; flush(); exit; DB_active_rec.php_compile_select功能

在尝试使用 _compiled_select()get_compiled_select()但没有成功之后,我只是打印了 db对象,您可以在 queries属性中看到这个查询。

你自己试试:

var_dump( $this->db );

如果您知道您只有一个查询,您可以直接打印它:

echo $this->db->queries[0];

我在这里读了所有的答案,但是不能得到

echo $this->db->get_compiled_select();

它让我犯了一些错误,比如,

从 xx 行控制器中的上下文“ Welcome”调用 protected 方法 CI _ DB _ active _ record: : _ edit _ select ()

因此,我删除了 protected从以下行从文件 \system\database\DB_active_rec.php和它的工作

protected function _compile_select($select_override = FALSE)

你可以在最后用这个。

echo $this->db->last_query();

如果您需要对查询进行快速测试,这对我来说非常有用

echo $this->db->last_query(); die;

我遇到了完全相同的问题,并最终找到了解决办法:

$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');

为了显示 sql 命令,我所要做的就是创建一个变量($result tstring) ,其内容与我的查询完全相同,然后回显它,如下所示: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

成功了!

使用 get_compiled_select()检索查询而不是替换它

在要打印的查询后面添加此行。

例如:

$query = $this-> db-> query (‘ SELECT * FROM table WHERE treaty’) ;

//添加此行。

var_dump($this->db->last_query());

出口() ;

或者

echo $this->db->last_query();

I'm using xdebug for watch this values in VSCode with the respective extension and CI v2.x. I add the expresion $this->db->last_query() in the watch section, and I add xdebugSettings node like these lines for get non truncate value in the launch.json.

{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000,
"xdebugSettings": {
"max_data": -1,
"max_children": -1
}
},

然后使用断点运行调试器,最后选择表达式并单击 right > copy value。

在 CodeIgniter4中,您可以这样做:

$db = \Config\Database::connect();
// your queries here
$query = $db->getLastQuery();
$sql = $query->getQuery();
echo $sql;