【发布时间】:2015-01-22 20:12:13
【问题描述】:
问题:
当我更新我的 CodeIgniter 2.2.0 应用程序以使用 mysqli 数据库驱动程序时,它破坏了 CodeIgniter 的 backup function of the 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
但是,当我尝试此解决方案时,我收到了这个致命错误...
文件名:core/MY_Loader.php,行号:49
致命错误:在第 217 行调用 /home/account/codeigniter/system/libraries/Session.php 中未定义的方法 CI_DB_mysqli_driver::where()
第 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... 两个完全不同的功能。 p>
可行的解决方案(不理想):
我找到的唯一可行的解决方案是编辑 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。
【问题讨论】:
-
如果
mysqldump在您的系统上可用,如果我是您,我会考虑向它发出系统调用。
标签: php mysql codeigniter mysqli codeigniter-2