【问题标题】:logging all queries after execution in codeigniter在 codeigniter 中执行后记录所有查询
【发布时间】:2016-09-20 07:17:51
【问题描述】:

我想在使用钩子执行后记录所有查询。 -i 在 config.php 中启用钩子 -这是我的钩子-->

 $hook['post_controller'] = array(    
    'class' => 'Db_log',             
    'function' => 'logQueries',     
   'filename' => 'db_log.php',    
   'filepath' => 'hooks'         
  );

-这是钩子定义-->

class Db_log 
{

    function __construct() 
    {
    }


    function logQueries() 
    {
        $CI = & get_instance();

        $filepath = APPPATH . 'logs/Query-log-' . date('Y-m-d') . '.php'; 
        $handle = fopen($filepath, "a+");                        

        $times = $CI->db->query_times;
        foreach ($CI->db->queries as $key => $query) 
        { 
            $sql = $query . " \n Execution Time:" . $times[$key]; 

            fwrite($handle, $sql . "\n\n");    
        }

        fclose($handle);  
    }

}

--创建 query_log 文件 --但是没有查询记录被存储

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    您的代码看起来不错 - 这不起作用的唯一原因是在您的数据库配置中 - 在 application/config/ 下的 database.php 中查看@your DB Connection

    有一个选项“save_queries”应该设置为true

    $db['default'] = array(
        ...
        'save_queries' => TRUE
    );
    

    【讨论】:

    • 上面的代码现在工作正常...但是它只记录 SELECT 查询,如果我只想记录 INSERT、UPDATE 和 DELETE 而不是 SELECT 查询怎么办?
    • 即使是其他类型的查询也应该被记录——在查询中都是查询类型
    • 是否有“$CI->db->queries”的选项
    • 选项是什么意思?您想将插入、更新、删除和选择彼此分开吗?
    • 应用程序中的内部重定向导致它超过了钩子执行,这就是它没有记录修改语句的原因......我后来找到了解决方案。
    【解决方案2】:

    对我来说,它只有在我在 config/hooks.php 中定义 de $hook 数组时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2010-09-23
      • 2010-10-11
      • 2021-12-24
      • 2018-04-27
      • 2013-02-18
      • 2015-02-02
      相关资源
      最近更新 更多