php – 如何扩展CodeIgniter数据库实用程序类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何扩展CodeIgniter数据库实用程序类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3035字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何扩展CodeIgniter数据库实用程序类](/upload/InfoBanner/zyjiaocheng/909/c16945f319fe4672a05ba99eccfd9e20.jpg)
问题:
当我更新我的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 */
}
免责声明:未经测试:)
内容总结
以上是互联网集市为您收集整理的php – 如何扩展CodeIgniter数据库实用程序类全部内容,希望文章能够帮你解决php – 如何扩展CodeIgniter数据库实用程序类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。