【问题标题】:Codeigniter : Cant load database in my library.Codeigniter:无法在我的库中加载数据库。
【发布时间】:2013-04-09 11:01:28
【问题描述】:

当我尝试打电话时

$this->load->database();

产生以下错误“调用非对象上的成员函数数据库()”
自动加载数据库也无济于事...
当我尝试自动加载它时。
对数据库的所有调用,例如

$this->db->get('people');

它说 get 方法未定义...
我不知道从什么开始以及从哪里开始..
\ 有人吗?

【问题讨论】:

    标签: codeigniter codeigniter-2


    【解决方案1】:

    转到application/config/autoload.php 中的 autoload.php 并添加此

    $autoload['libraries'] = array('database'); // add database in array
    

    确保application/config/database.php中的连接设置正常

    比在图书馆这样做

    Class MyLib
    {
        function getPeople(){
            $CI =   &get_instance();
            $query  =   $CI->db->get('people');
            return $query->result();
        }
    }
    

    【讨论】:

    • :( .. 仍然不起作用...我将代码放入构造中.. 并添加了变量来设置 $CI .. 仍然没有运气...
    • 如果您自动加载数据库,您不必这样做。简单使用$CI->db->get('people'); 就可以了
    • $CI = &get_instance(); .... yikes 看起来此代码会影响其他代码.....
    • @KebyangBlabla 我已经编辑了我的答案并简化了它。查看它以解决您的问题。另外,当您有模型时,为什么要使用库
    • 我只需要访问我图书馆的数据库中的一些内容。 &get_instance();我虽然这是一个错字.. 抱歉.. 我正在将我的代码迁移到模型.. 啊.. 不眠之夜.. woe woe...
    【解决方案2】:

    如果不工作,请使用 extends CI_Model 尝试扩展模型

    class User_model extends CI_Model { 
    
         public function __construct() 
         {
               parent::__construct(); 
               $this->load->database();
         }
    }
    

    【讨论】:

      【解决方案3】:

      可以通过两种方式加载数据库:

      方法一:自动连接

      $autoload['libraries']=array('database');

      方法二:手动连接

      $this->load>database();

      我希望以上方法能消除你的困惑......

      【讨论】:

        【解决方案4】:

        你犯了一个很常见的错误。当您从controller 或model 调用$this->load->database(); 时,它会起作用,因为控制器和模型分别是CI_Controller 和CI_Model 的子级。但是,当您从不是任何基本 CIclass 的子类的库中调用它们时,您无法使用 $this-> 键加载 database() 或其他任何内容。您必须使用&get_instance(); 的帮助来加载codeigniter 实例并使用该实例而不是$this。这表明以下代码:

        $INST=&get_instance();//Store instance in a variable.
        $INST->load->database();//If autoload not used.
        $INST->db->get('people');//or Your desired database operation.
        

        最好保留一个字段变量来保存对$INST的引用,因为您可能需要在各种函数中访问它。

        下面的代码会更优雅:

         class MyLib{
             var $INST;
             public function __construct() 
             {
                 $INST=&get_instance();//Store instance in a variable.
                 $INST->load->database();//If autoload not used.
             }
        
             function getPeople(){
                 $query  =  $INST->db->get('people');
                 return $query->result();
             }
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-14
          • 2015-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多