sql >> Base de Datos >  >> RDS >> Mysql

CodeIgniter:¿auditoría SQL de todas las llamadas al método $this->db->query()?

Depende de cómo quieras auditarlos. Si está buscando por página, habilitar el perfilador estará bien. Esto muestra todas las consultas ejecutadas en la carga de esa página, así como el tiempo necesario para ejecutarlas. Vea el enlace a continuación en el generador de perfiles.

http://codeigniter.com/user_guide/general/profiling.html

Si desea registrar todas las consultas a medida que ocurren y luego leer el archivo de registro más tarde, tendrá que ampliar la clase de la base de datos. Si este es el caso, comente y actualizaré/extenderé mi respuesta aún más.

Ampliación para sobrescribir query()

Extienda MY_Loader.php en /application/core/ e inserte esta función

function database($params = '', $return = FALSE, $active_record = NULL)
    {
        // Grab the super object
        $CI =& get_instance();

        // Do we even need to load the database class?
        if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db)) {
            return FALSE;
        }

        require_once(BASEPATH.'database/DB'.EXT);

        // Load the DB class
        $db =& DB($params, $active_record);

        $my_driver = config_item('subclass_prefix').'DB_'.$db->dbdriver.'_driver';
        $my_driver_file = APPPATH.'core/'.$my_driver.EXT;

        if (file_exists($my_driver_file)) {
            require_once($my_driver_file);
            $db = new $my_driver(get_object_vars($db));
        }

        if ($return === TRUE) {
            return $db;
        }

        // Initialize the db variable.  Needed to prevent
        // reference errors with some configurations
        $CI->db = '';
        $CI->db = $db;
    }

Luego crea /application/core/MY_DB_mysql_driver.php

Luego, dentro de eso, puede sobrescribir query()

function query($sql, $binds = FALSE, $return_object = TRUE) {
    // Do your stuff
    return parent::query( $sql, $binds, $return_object );
}

Obviamente, reemplace mysql en el nombre del archivo por cualquier controlador de base de datos que esté usando/intentando extender.

Esto también funcionará con Active Record como todos los get() los métodos llaman a query() del controlador para ejecutar sus consultas.