【问题标题】:How to print SQL statement in codeigniter model如何在 codeigniter 模型中打印 SQL 语句
【发布时间】:2011-09-02 18:45:13
【问题描述】:

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

那我说

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

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

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

【问题讨论】:

    标签: php sql codeigniter


    【解决方案1】:

    你可以用这个:

    $this->db->last_query();
    

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

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

    【讨论】:

      【解决方案2】:

      显示查询字符串:

      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

      【讨论】:

      • 当我做 print_r($query);什么都没有打印出来
      • 使用 CI 内置分析器,更多信息here
      • 我想要做的就是打印出传递给数据库的 sql 语句,抱歉,但是探查器也没有多大帮助
      • 访问我发布的用户指南链接,如果它不起作用,请告诉我们发生了什么。
      • 我想出了我的问题,oracle 不接受我的日期格式,我尝试了我认为的所有格式,它只会接受 SYSDATE
      【解决方案3】:

      可以显示ActiveRecord生成的SQL:

      查询运行前:

      $this->db->_compile_select(); 
      

      在它运行之后:

      $this->db->last_query(); 
      

      【讨论】:

      • 当我使用 $this->db->_compile_select();我收到致命错误:调用受保护的方法 CI_DB_active_record::_compile_select() from
      • 分析器的东西对我没有好处,没有显示我想要的查询,只是获取 SQL 过于复杂......这对我有用:- echo $this->EE-> db->_compile_select();
      • 在 CI3 中,请改用 $this->db->get_compiled_select()
      【解决方案4】:

      如果您需要对查询进行快速测试,这对我很有用

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

      【讨论】:

        【解决方案5】:

        在尝试使用_compiled_select()get_compiled_select() 失败后,我刚刚打印了db 对象,您可以在queries 属性中看到查询。

        自己试试吧:

        var_dump( $this->db );
        

        如果你知道你只有一个查询,你可以直接打印出来:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 致命错误:调用未定义的方法 CI_DB_mysql_driver::get_compiled_select()
          【解决方案7】:

          你可以简单地在最后使用它..

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

              在 CodeIgniter4 中,您可以这样做:

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

              【讨论】:

                【解决方案10】:

                我尝试@Chumillas 的答案和@chhameed 的答案,但它不起作用,因为 sql 是错误的。所以我找到了新方法,像这样:

                • return $sql; 之前插入echo $sql; flush(); exit; _compile_selectDB_active_rec.php 的功能

                【讨论】:

                  【解决方案11】:

                  在要打印的查询之后添加这一行。

                  例子:

                  $query = $this->db->query('SELECT * FROM table WHERE 条件');

                  //添加这一行。

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

                  exit();

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

                  【讨论】:

                    【解决方案12】:

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

                    【讨论】:

                    • 我建议展示如何使用您在这种特殊情况下提出的功能,而不仅仅是提及它。最好的问候
                    【解决方案13】:

                    我正在使用 xdebug 在 VSCode 中使用相应的扩展名和 CI v2.x 观察这些值。我在监视部分添加表达式$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
                      }
                    },
                    

                    并使用断点运行我的调试器,最后只需选择我的表达式并单击右键 > 复制值。

                    【讨论】:

                      【解决方案14】:

                      我在这里阅读了所有答案,但无法获得

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

                      工作,它给了我这样的错误,

                      在第 xx 行的控制器中从上下文“欢迎”调用受保护的方法 CI_DB_active_record::_compile_select()

                      所以我从文件\system\database\DB_active_rec.php 的下一行删除了protected,它起作用了

                      protected function _compile_select($select_override = FALSE)
                      

                      【讨论】:

                        【解决方案15】:

                        我遇到了完全相同的问题并最终找到了解决方案。我的查询运行如下:

                        $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 '; ?>

                        有效!

                        【讨论】:

                        • 这不是 CodeIgniter 的方式。
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-01-12
                        • 1970-01-01
                        • 2023-03-20
                        • 2021-06-23
                        • 2011-06-07
                        • 1970-01-01
                        相关资源
                        最近更新 更多