2012-04-24 44 views
0

我正在四处寻找这个问题!但没有什么真正帮助解决这个问题。CodeIgniter模型类中的数据库调用

我总是得到以下错误: “致命错误:调用一个成员函数查询()一个非对象”

我有以下控制器:

<?php 
class Station extends CI_Controller { 

    function __construct($params=array()) { 
     parent::__construct(); 

     session_start(); 

     $this->load->library('parser'); 
     $this->load->helper(array('form', 'url')); 
    } 

    public function index() { 
     $this->tpl_data['location'] = $this->stationmodel->getLocations()->all; 
     $_SESSION['location'] = $this->tpl_data['location']; 


     $this->load->view('station', $this->tpl_data); 
    } 
} 

>

而以下型号:

<?php 
class StationModel extends CI_Model { 

    function __construct() { 
     parent::__construct(); 
    } 

    public function getLocations() { 
     $query = $this->db->query("SELECT * FROM location WHERE City_IATA = 'MUC'"); 
     var_dump($query); 

     // Just for test purposes! 
     foreach($query->result() as $row) { 
      echo $row->Location_Name_DE . '<br />'; 
     } 
    } 
} 

>

在我autoload.php我加载数据库模块:

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

而且当我尝试在控制器中直接加载数据库MODUL我会得到同样的错误。

我database.php中:

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = '****'; 
$db['default']['database'] = 'comvel'; 
$db['default']['dbdriver'] = 'mysql'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

任何人都可以帮我吗?

在此先感谢!

+0

什么返回var_dump? – Patroklo 2012-04-24 10:42:25

+0

你检查了你的数据库设置吗? – 2012-04-24 10:43:23

+0

var_dump不会返回任何内容,导致它在var_dump之前死亡。 数据库设置已检查并罚款: -/ – Xederas 2012-04-24 11:09:49

回答

1

在您的控制器尝试从function __construct($params=array())

去除$params=array()我也想从你的模型中删除__construct() {}因为它没有做任何事情,可能会导致你的麻烦。

+0

感谢您的提示!我更改了控制器中的__construct,并从模型中删除了__construct。但没有任何改变。仍然收到错误。 – Xederas 2012-04-24 13:02:45

+0

在'$ this-> db-> query()'行之前尝试var'dump' $ this-> db'。 – freshnode 2012-04-24 13:05:40

+0

var_dump($ this-> db)返回null。所以数据库不会被初始化。但数据库模块在config/autload.php中设置,并且config/database.php中的参数也很好。我必须设置其他任何东西吗? – Xederas 2012-04-24 13:27:54

0

这是一个奇怪的。看起来你已经做得很好。

你有没有尝试完全删除构造函数?我的猜测是你的构造函数以某种方式阻止你的模型被db对象初始化。如果您需要运行一些初始化代码,则可能更适合使用hook,例如pre_controller钩子。