Codeigniter:无法在我的库中加载数据库。

时间:2013-04-09 11:01:29

标签: codeigniter codeigniter-2

当我尝试拨打

$this->load->database();

产生以下错误:“在非对象上调用成员函数数据库()”
自动加载数据库也没有帮助...
当我尝试自动加载它。
所有对数据库的调用如

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

它说get方法未定义......
我不知道什么和从哪里开始..
\ 有谁?

4 个答案:

答案 0 :(得分:10)

转到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();
    }
}

答案 1 :(得分:1)

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

class User_model extends CI_Model { 

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

答案 2 :(得分:0)

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

方法1:自动连接

$自动加载['文库'] =阵列('数据库&#39);

方法2:手动连接

$这 - >负载>数据库();

我希望以上方法可以清除你的困惑......

答案 3 :(得分:0)

您正在犯一个非常常见的错误。当您从$this->load->database();controller调用model时,它起作用了,因为控制器和模型分别是CI_ControllerCI_Model的子代。但是,当从不是任何基本CI类的子类的Library中调用它们时,就无法使用$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();
     }
 }