【发布时间】:2013-04-09 11:01:28
【问题描述】:
当我尝试打电话时
$this->load->database();
产生以下错误“调用非对象上的成员函数数据库()”
自动加载数据库也无济于事...
当我尝试自动加载它时。
对数据库的所有调用,例如
$this->db->get('people');
它说 get 方法未定义...
我不知道从什么开始以及从哪里开始..
\
有人吗?
【问题讨论】:
当我尝试打电话时
$this->load->database();
产生以下错误“调用非对象上的成员函数数据库()”
自动加载数据库也无济于事...
当我尝试自动加载它时。
对数据库的所有调用,例如
$this->db->get('people');
它说 get 方法未定义...
我不知道从什么开始以及从哪里开始..
\
有人吗?
【问题讨论】:
转到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->db->get('people'); 就可以了
如果不工作,请使用 extends CI_Model 尝试扩展模型
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
$this->load->database();
}
}
【讨论】:
可以通过两种方式加载数据库:
方法一:自动连接
$autoload['libraries']=array('database');
方法二:手动连接
$this->load>database();
我希望以上方法能消除你的困惑......
【讨论】:
你犯了一个很常见的错误。当您从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();
}
}
【讨论】: