sql >> Databáze >  >> RDS >> Mysql

CodeIgniter:SQL Audit všech volání metody $this->db->query()?

Záleží na tom, jak je chcete auditovat. Pokud hledáte základ na stránku, bude povolení profilování v pořádku. Zobrazuje všechny dotazy spuštěné při načtení stránky a také čas potřebný k jejich provedení. Viz odkaz níže na profilovači.

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

Pokud chcete protokolovat všechny dotazy tak, jak k nim dojde, a poté číst soubor protokolu později, budete muset rozšířit třídu databáze. Pokud je to váš případ, napište komentář a já svou odpověď dále aktualizuji/rozšířím.

Rozšíření o přepsání query()

Rozšiřte MY_Loader.php do /application/core/ a vložte tuto funkci

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;
    }

Poté vytvořte /application/core/MY_DB_mysql_driver.php

Pak uvnitř toho můžete přepsat query()

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

Samozřejmě nahraďte mysql v názvu souboru jakýmkoli databázovým ovladačem, který používáte/pokoušíte se rozšířit.

Toto bude také fungovat s aktivním záznamem jako se všemi get() volání metod při query() od ovladače ke spouštění jejich dotazů.



  1. Problém s přístupem k údajně deaktivované funkci v CODEIGNITER

  2. Správa uživatelů databáze:Správa rolí pro MariaDB

  3. Potřebujete pomoc s hierarchickým dotazem Mysql

  4. SQL, jak odečíst výsledek řádek 1 od řádku 2, řádek 2 od řádku 3