php – 如何扩展CodeIgniter数据库实用程序类
问题:
当我更新我的CodeIgniter 2.2.0应用程序以使用mysqli数据库驱动程序时,它破坏了CodeIgniter的backup function of the Database Utility Class.我曾经成功获得数据库备份,我现在收到错误…
该错误只是意味着Database Utility Class中的CodeIgniter备份功能不支持mysqli.根据在线文档,仅支持MySQL. 但是,我不想使用已弃用的mysql数据库驱动程序. 可能的解决方法(不允许): 我想我可以通过简单地扩展CodeIgniter的Database Utility类来解决这个问题.但是,CodeIgniter does not allow this as per documentation ……
另一种解决方法(致命错误): 编辑:my answer和the accepted answer基于此变通方法. 此GitHub页面描述了通过创建MY_Loader类来扩展核心来扩展数据库类的方法. https://github.com/bcit-ci/CodeIgniter/wiki/Extending-Database-Drivers 但是,当我尝试这个解决方案时,我得到了这个致命错误……
第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!! 相反,我会覆盖 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 */ } 免责声明:未经测试:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |