Хук 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");
}