sql >> Database >  >> RDS >> Mysql

CodeIgniter:SQL-controle van alle $this->db->query()-methodeaanroepen?

Het hangt ervan af hoe u ze wilt controleren. Als u op zoek bent naar een basis per pagina, dan is het inschakelen van de profiler prima. Dit toont alle zoekopdrachten die op die pagina worden uitgevoerd, evenals de tijd die nodig is om ze uit te voeren. Zie de onderstaande link op de profiler.

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

Als u alle query's wilt loggen terwijl ze plaatsvinden en het logbestand later wilt lezen, moet u de databaseklasse uitbreiden. Als dit het geval is, reageer dan en ik zal mijn antwoord bijwerken/uitbreiden.

Uitbreiden om query() te overschrijven

Breid MY_Loader.php uit in /application/core/ en voeg deze functie in

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

Maak vervolgens /application/core/MY_DB_mysql_driver.php

Daarbinnen kun je query()

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

Vervang uiteraard mysql in de bestandsnaam door het databasestuurprogramma dat u gebruikt/probeert uit te breiden.

Dit werkt ook met Active Record als alle get() methoden doen een beroep op query() van de bestuurder om hun zoekopdrachten uit te voeren.



  1. Vastgelopen op PHP-query

  2. php pdo krijgt slechts één waarde van mysql; waarde die gelijk is aan variabele

  3. SQL IN-clausule langzamer dan afzonderlijke query's

  4. MySQL-opslagduur - datatype?