Mysql
 sql >> Datenbank >  >> RDS >> Mysql

CodeIgniter:SQL Audit aller $this->db->query() Methodenaufrufe?

Es hängt davon ab, wie Sie sie prüfen möchten. Wenn Sie nach einer Basis pro Seite suchen, ist die Aktivierung des Profilers in Ordnung. Dies zeigt alle Abfragen, die beim Laden dieser Seite ausgeführt werden, sowie die Zeit, die für ihre Ausführung benötigt wird. Siehe den Link unten auf dem Profiler.

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

Wenn Sie alle Abfragen sofort protokollieren und die Protokolldatei später lesen möchten, müssen Sie die Datenbankklasse erweitern. Wenn dies der Fall ist, kommentieren Sie und ich werde meine Antwort weiter aktualisieren/erweitern.

Erweitern um query() zu überschreiben

Erweitern Sie MY_Loader.php in /application/core/ und fügen Sie diese Funktion ein

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

Erstellen Sie dann /application/core/MY_DB_mysql_driver.php

Darin können Sie dann query()

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

Ersetzen Sie offensichtlich mysql im Dateinamen durch den Datenbanktreiber, den Sie verwenden/versuchen zu erweitern.

Dies funktioniert auch mit Active Record als dem gesamten get() Methoden rufen query() auf vom Treiber, um ihre Abfragen auszuführen.