【问题标题】:Codeigniter: problem extending Database DriverCodeigniter:扩展数据库驱动程序的问题
【发布时间】:2021-02-18 00:32:01
【问题描述】:

我正在使用 Codeigniter 2.x 并试图扩展数据库类和 followed the wiki 但我收到此错误:

致命错误:未捕获的错误:在第 218 行的 /system/libraries/Session.php 中调用未定义的方法 MY_DB_mysqli_driver::where()

错误:在第 218 行的 /system/libraries/Session.php 中调用未定义的方法 MY_DB_mysqli_driver::where()

在 /system/libraries/Session.php 的第 218 行:

$this->CI->db->where('session_id', $session['session_id']); 

我的扩展类只是 wiki 中的示例:

<?php
class MY_DB_mysqli_driver extends CI_DB_mysqli_driver
{
    public function __construct($params)
    {
        parent::__construct($params);
        log_message('debug', 'Extended DB driver class instantiated!');
    }

    public function get_first($table)
    {
        return $this->limit(1)->get($table);
    }
} 

【问题讨论】:

  • 截至 2020 年 Codeigniter 2 不再受支持,我什至不知道扩展核心是否甚至是 ci2 中的一个功能。
  • @marcogmonteiro 您可以在 CI2 中扩展核心。 wiki 声明它也适用于 CI2
  • 你不能扩展 CI_Model 吗?
  • @TimBrownlaw 什么型号?我想扩展数据库驱动程序。本期没有模特。
  • 作为一个测试:如果你用硬编码的变量替换所有会话变量.... 会起作用吗?

标签: php codeigniter codeigniter-2


【解决方案1】:

你得到的错误实际上是正确的。我刚刚下载了第 2 版以确保它。

您正在扩展 CI_DB_mysqli_driver,而您实际添加的内容应该在活动记录库中而不是数据库驱动程序中。

不要扩展您的CI_DB_driver,而是创建CI_DB_active_record 的扩展并在其中添加get_first 功能。

我必须补充一点,如果您想将这个功能添加到您的核心中,我什至不会费心用它来扩展核心,因为您只是逐行交易,没有任何收益。

此外,大多数这些扩展都可以在良好的基础模型中完成,而不是侵入核心。

【讨论】:

  • 是的,它绝对是模型扩展的候选者。 IE。我的模型。
  • 我只是在示例中使用了该函数 get_first() 。我需要做的是拦截来自活动记录类的所有查询,这样我就可以使用不同的 mysql 服务器进行读取,另一个用于写入。使用模型是不可行的。我真的需要扩展数据库驱动程序/活动记录类。
  • 好吧,它说明了如何做到这一点,我认为你做对了,如果你得到一个错误而不是它可能是一个错误。我们谈论的是一个 10 年前不再支持的框架版本,因此这是意料之中的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2011-12-10
  • 2015-05-30
  • 2015-01-22
  • 2012-06-18
  • 1970-01-01
相关资源
最近更新 更多