当我尝试拨打
时$this->load->database();
产生以下错误:“在非对象上调用成员函数数据库()”
自动加载数据库也没有帮助...
当我尝试自动加载它。
所有对数据库的调用如
$this->db->get('people');
它说get方法未定义......
我不知道什么和从哪里开始..
\
有谁?
答案 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_Controller
和CI_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();
}
}