【问题标题】:CodeIgniter Database call in Model-Class模型类中的 CodeIgniter 数据库调用
【发布时间】:2012-04-24 10:05:59
【问题描述】:

我一直在寻找这个问题!但没有什么能真正帮助解决这个问题。

我总是收到以下错误: “致命错误:在非对象上调用成员函数 query()”

我有以下控制器:

<?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');

另外,当我尝试直接在控制器中加载数据库模块时,我会得到同样的错误。

我的数据库.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;

谁能帮帮我?

提前致谢!

【问题讨论】:

  • 什么返回 var_dump?
  • 你检查你的数据库设置了吗?
  • var_dump 什么都不返回,因为它在 var_dump 之前就死了。检查数据库设置并正常:-/
  • 你想要查询多少个结果来获取单个或多个如果单个然后使用 $query->row()
  • 我想要多个结果。但我的问题是,这行 $query = $this->db->query("SELECT * FROM location WHERE City_IATA = 'MUC'");创建错误“致命错误:在非对象上调用成员函数 query()”

标签: php database codeigniter model fatal-error


【解决方案1】:

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

我还会从您的模型中删除 __construct() {},因为它没有任何作用,可能会给您带来麻烦。

【讨论】:

  • 感谢您的提示!我更改了控制器中的 __construct 并从模型中删除了 __construct。但什么都没有改变。仍然收到错误。
  • $this-&gt;db-&gt;query() 行之前尝试 var dumping $this-&gt;db
  • var_dump($this->db) 返回 null。所以数据库没有初始化。但是数据库模块是在config/autload.php中设置的,config/database.php中的参数也可以。我还需要设置什么吗?
【解决方案2】:

这是一个奇怪的问题。看起来你做的一切都是正确的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多