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

时间:2011-05-26 16:43:58

标签: php sql codeigniter

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

然后我说

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

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

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

上显示

16 个答案:

答案 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(); 

执行查询之前(特定的SQL指令方法)

CodeIgnitier没有提供通俗易懂的方法来在执行之前获取SQL,您必须使用特定的方法。

获取SELECT查询

$sql = $this->db->get_compiled_select()

获取INSERT查询

$sql = $this->db->get_compiled_insert()

获取UPDATE查询

$sql = $this->db->get_compiled_update()

获取DELETE查询

$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)