Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CodeIgniter:Audyt SQL wszystkich wywołań metod $this->db->query()?

To zależy od tego, jak chcesz je skontrolować. Jeśli szukasz bazy na stronę, włączenie profilera będzie w porządku. Pokazuje wszystkie zapytania uruchomione podczas tego ładowania strony, a także czas potrzebny na ich wykonanie. Zobacz poniższy link w profilerze.

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

Jeśli chcesz rejestrować wszystkie zapytania w miarę ich pojawiania się, a następnie odczytać plik dziennika później, będziesz musiał rozszerzyć klasę bazy danych. Jeśli tak jest, skomentuj, a ja zaktualizuję/rozszerzę moją odpowiedź.

Rozszerzenie na nadpisanie query()

Rozszerz MY_Loader.php w /application/core/ i wstaw tę funkcję

baza danych funkcji
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;
    }

Następnie utwórz /application/core/MY_DB_mysql_driver.php

Następnie w środku możesz nadpisać zapytanie()

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

Oczywiście zastąp mysql w nazwie pliku dowolnym sterownikiem bazy danych, którego używasz/próbujesz rozszerzyć.

Będzie to również działać z Active Record, ponieważ wszystkie funkcje get() metody wywołują query() od kierowcy, aby uruchomić ich zapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błędy przy zmianie zawartości zmiennych w zależności od statusu sesji

  2. Jak zrobić stronicowanie danych JSON w PHP?

  3. Połącz Entity Framework z MYSQL w VS2019

  4. MySQL:GROUP_CONCAT z LEFT JOIN

  5. pomijanie tabel podczas uruchamiania mapowania konwersji Doctrine