Хук CodeIgniter не перехватывает запросы вставки / обновления

Я пытаюсь использовать post_system или же post_controller перехватить, чтобы поймать и записать все запросы вставки и обновления в таблицу базы данных. Но происходит то, что $queries = $CI->db->queries; утверждение, кажется, не ловит любой оператор вставки или обновления вообще. Он только перехватывает операторы SELECT, даже когда новые данные вставлены или старые данные обновлены в соответствующих представлениях / контроллерах.

Вот мой соответствующий код:

hooks.php

<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

// also tried with post_controller hook
$hook['post_system'] = array(
    'class' => 'Db_query_log', 
    'function' => 'log_db_queries', 
    'filename' => 'db_log.php', 
    'filepath' => 'hooks'        
);

Крючки /db_log.php

    <?php

class Db_query_log {

    function __construct() {
        //nothing special    
    }

    function log_db_queries() {
        $CI = & get_instance();
        $queries = $CI->db->queries;

        foreach ($queries as $key => $query) {
            echo $query . "<br>"; 
        // all statements displayed are SELECT statements even for UPDATE and INSERT operations performed by controllers where data is actually changed 
        }
    }

}

Что может быть виновником здесь? Я что-то упустил или этот хук просто игнорирует операции INSERT/UPDATE?

Любая помощь будет оценена, спасибо!

2 ответа

Использование post_controller вместо post_system:

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

Для этого откройте любой вспомогательный файл и поместите этот код внизу

function log_que($sql) {
        $filepath = APPPATH . 'logs/Query-log-' . date('Y-m-d') . '.php';   
            $handle = fopen($filepath, "a+");
            fwrite($handle, $sql." \n Execution Time: ".date("Y-m-d H:i:s")."\n\n");  
            fclose($handle);   
}

после этого перейдите в system/database/DB_driver.php и найдите функцию с именем "query" и поместите этот код внизу внутри функции.

log_que($sql);'

тогда все запросы будут сохранены в файле внутри папки application/logs.

Вы можете поставить условие if, если хотите сохранить только определенные запросы. ЛАЙК

if(preg_match('/INSERT/',$sql)) {
 fwrite($handle, $sql." \n Execution Time: ".date("Y-m-d H:i:s")."\n\n");  
}
Другие вопросы по тегам