加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

php – CodeIgniter:所有$this-#62; db-#62; query()方法

发布时间:2021-03-30 18:13:48 所属栏目:MySql教程 来源:网络整理
导读:我正在使用CodeIgniter 2并希望审核所有$this-> db->查询($sql);调用. 我们所有的数据库调用都是通过query()方法调用的;没有活动记录使用.我需要记录$sql查询并将它们输入到自定义表中以进行审计记录.有没有人知道扩展核心系统数据库库审计查询的方法? 看

我正在使用CodeIgniter 2并希望审核所有$this-> db->查询($sql);调用.

我们所有的数据库调用都是通过query()方法调用的;没有活动记录使用.我需要记录$sql查询并将它们输入到自定义表中以进行审计记录.有没有人知道扩展核心系统数据库库审计查询的方法?

看起来这应该很容易,但我似乎无法找到一个简单的解决方案. CI论坛有几个关于旧版本的失败帖子.

最佳答案 这取决于您想要如何审核它们.如果您要查找每页,那么启用分析器就可以了.这显示了在该页面加载上运行的所有查询以及执行它们所花费的时间.请参阅探查器上的以下链接.

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

如果您希望在发生所有查询时将其记录下来,然后再读取日志文件,则必须扩展数据库类.如果是这种情况,请发表评论并进一步更新/扩展我的答案.

扩展以覆盖查询()

在/ application / core /中扩展MY_Loader.php并插入此函数

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()来运行查询.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读