Mysql
 sql >> база данни >  >> RDS >> Mysql

CodeIgniter:SQL одит на всички извиквания на метод $this->db->query()?

Зависи как искате да ги одитирате. Ако търсите база за страница, тогава активирането на профайлъра ще бъде добре. Това показва всички заявки, изпълнявани при зареждане на тази страница, както и времето, необходимо за тяхното изпълнение. Вижте връзката по-долу на профила.

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

Ако искате да регистрирате всички заявки, както се случват, и след това да прочетете регистрационния файл по-късно, ще трябва да разширите класа на базата данни. Ако случаят е такъв, коментирайте и аз ще актуализирам/разширя отговора си допълнително.

Разширяване за презаписване на query()

Разширете MY_Loader.php в /application/core/ и вмъкнете тази функция

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

След това създайте /application/core/MY_DB_mysql_driver.php

След това вътре можете да презапишете query()

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

Очевидно заменете mysql в името на файла с какъвто и драйвер за база данни, който използвате/опитвате се да разширите.

Това ще работи и с Active Record като всички get() методи извикват query() от драйвера, за да изпълняват своите заявки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на SQL Server 2000 за ДВУЛИРАНЕ НА КЛЮЧ?

  2. PDO получава последния вмъкнат идентификатор

  3. MySQL - mysqldump --routines за експортиране само на 1 съхранена процедура (по име), а не на всяка рутина

  4. Използване на роли, нови в MySQL 8

  5. Защо PDO::lastInsertId връща 0?