Хук 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?

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

0

Решение

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

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

Другие решения

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

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");
}
0