Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

CodeIgniter:Audit SQL dari semua panggilan metode $this->db->query()?

Itu tergantung bagaimana Anda ingin mengauditnya. Jika Anda mencari basis per halaman maka mengaktifkan profiler akan baik-baik saja. Ini menunjukkan semua kueri yang dijalankan pada pemuatan halaman itu serta waktu yang dibutuhkan untuk menjalankannya. Lihat tautan di bawah pada profiler.

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

Jika Anda ingin mencatat semua kueri saat terjadi dan kemudian membaca file log nanti, Anda harus memperluas kelas database. Jika demikian, beri komentar dan saya akan memperbarui/memperluas jawaban saya lebih lanjut.

Memperluas untuk menimpa query()

Perluas MY_Loader.php di /application/core/ dan masukkan fungsi ini

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

Kemudian buat /application/core/MY_DB_mysql_driver.php

Kemudian di dalamnya Anda dapat menimpa query()

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

Jelas ganti mysql di nama file ke driver database apa pun yang Anda gunakan/coba perpanjang.

Ini juga akan bekerja dengan Rekaman Aktif karena semua get() metode memanggil query() dari pengemudi untuk menjalankan kueri mereka.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa efek menggunakan susunan biner?

  2. GeoDjango &MySQL:poin tidak boleh NULL, nilai kosong apa lagi yang harus saya gunakan?

  3. Pencarian tidak sensitif diakritik MySQL (aksen Spanyol)

  4. Variabel string PHP dalam klausa WHERE MySQL

  5. Mengoptimalkan pilihan mysql sederhana pada tabel besar (75 juta+ baris)