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

php – 如何扩展CodeIgniter数据库实用程序类

发布时间:2020-12-13 17:48:00 所属栏目:PHP教程 来源:网络整理
导读:问题: 当我更新我的CodeIgniter 2.2.0应用程序以使用mysqli数据库驱动程序时,它破坏了CodeIgniter的backup function of the Database Utility Class.我曾经成功获得数据库备份,我现在收到错误… Unsupported feature of the database platform you are usin
问题:

当我更新我的CodeIgniter 2.2.0应用程序以使用mysqli数据库驱动程序时,它破坏了CodeIgniter的backup function of the Database Utility Class.我曾经成功获得数据库备份,我现在收到错误…

Unsupported feature of the database platform you are using.

该错误只是意味着Database Utility Class中的CodeIgniter备份功能不支持mysqli.根据在线文档,仅支持MySQL.

但是,我不想使用已弃用的mysql数据库驱动程序.

可能的解决方法(不允许):

我想我可以通过简单地扩展CodeIgniter的Database Utility类来解决这个问题.但是,CodeIgniter does not allow this as per documentation ……

Note: The Database classes can not be extended or replaced with your own classes.

另一种解决方法(致命错误):

编辑:my answer和the accepted answer基于此变通方法.

此GitHub页面描述了通过创建MY_Loader类来扩展核心来扩展数据库类的方法.

https://github.com/bcit-ci/CodeIgniter/wiki/Extending-Database-Drivers

但是,当我尝试这个解决方案时,我得到了这个致命错误……

Filename: core/MY_Loader.php,Line Number: 49

Fatal error: Call to undefined method CI_DB_mysqli_driver::where() in /home/account/codeigniter/system/libraries/Session.php on line 217

第49行是:$db =& new $my_driver(get_object_vars($db));

我完全按照上面的链接描述使用MY_Loader,MY_DB_mysqli_utility看起来像这样……

<?php class MY_DB_mysqli_utility extends CI_DB_mysqli_utility {

    function __construct($params){
        parent::__construct($params);
        log_message('debug','Extended DB driver class instantiated!');
    }

    function _backup($params = array())
    {
        // the working backup function is here
        .....
    }

}

(我不完全确定这个GitHub解决方法是否失败,因为它已经过时,我忽略了一些东西,或者是因为我试图在CI_DB_mysqli_utility而不是CI_DB_mysqli_driver上使用它.)

编辑:这个解决方法是失败的,因为它只是为了扩展_driver而不是_utility …两个完全不同的功能.

工作解决方案(不理想):

我发现的唯一可行解决方案是编辑CodeIgniter系统文件.出于显而易见的原因,我宁愿不这样做.

位于system / database / drivers / mysqli / mysqli_utility.php的“损坏”备份功能如下……

function _backup($params = array())
{
    // Currently unsupported
    return $this->db->display_error('db_unsuported_feature');
}

有一个Ellis Lab线程显示一个有效的功能……

https://ellislab.com/forums/viewthread/194645/

我通过使用新的_backup函数编辑核心系统文件来实现它.

function _backup($params = array())
{
    // the working backup function is here
    .....
}

那么我还能/我应该做什么呢?

mysqli驱动程序不支持CodeIgniter的备份功能,我不允许扩展CodeIgniter数据库实用程序,让我别无选择,只能编辑核心系统文件.我好像被卡住了,我来这儿看我是否错过了什么,或者我还能做什么,而不是编辑核心系统文件.

编辑:请注意CodeIgniter v3中的数据库实用程序类完全支持mysqli.

解决方法

涉及自定义加载器( Extending Database Drivers)的解决方案仅与以下内容相关:扩展数据库驱动程序.你不能只用* _utility类替换* _driver类.

$my_driver_file = APPPATH.'libraries/'.$my_driver.EXT; // *driver* required!!

相反,我会覆盖CI_Loader::dbutil() method.像这样的东西应该工作:

public function dbutil()
{
    /* snip for brevity */
    $class = config_item('subclass_prefix').'DB_'.$db->dbdriver.'_utility';
    $filename = APPPATH.'libraries/'.$class.EXT;
    require_once($filename);
    /* snip for brevity */
 }

免责声明:未经测试:)

(编辑:李大同)

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

    推荐文章
      热点阅读