Mysql
 sql >> Base de données >  >> RDS >> Mysql

CodeIgniter :Audit SQL de tous les appels de méthode $this->db->query() ?

Cela dépend de la façon dont vous souhaitez les auditer. Si vous recherchez une base par page, l'activation du profileur ira bien. Cela montre toutes les requêtes exécutées sur ce chargement de page ainsi que le temps nécessaire pour les exécuter. Voir le lien ci-dessous sur le profileur.

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

Si vous souhaitez enregistrer toutes les requêtes au fur et à mesure, puis lire le fichier journal ultérieurement, vous devrez étendre la classe de base de données. Si tel est le cas, commentez et je mettrai à jour/étendrai ma réponse davantage.

Extension pour écraser query()

Étendez MY_Loader.php dans /application/core/ et insérez cette fonction

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

Créez ensuite /application/core/MY_DB_mysql_driver.php

Ensuite, à l'intérieur, vous pouvez écraser query()

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

Évidemment, remplacez mysql dans le nom de fichier par le pilote de base de données que vous utilisez/essayez d'étendre.

Cela fonctionnera également avec Active Record comme tous les get() les méthodes appellent query() du conducteur pour exécuter leurs requêtes.