1

我是 codeigniter 的新手,我已经开发了一个代码来对数据库进行查询。我使用加载数据库$this->load->database();并执行查询,但是当我运行代码时,浏览器会给我以下错误消息:

A PHP Error was encountered Severity: Notice Message: Undefined property: Tutorial::$load.
Fatal error: Call to a member function database() on a non-object

这是我正在使用的代码:

class Tutorial extends CI_Controller {
    public function tutorial() {
        $this->load->database();
        $query = $this->db->query('SELECT user,pass,email FROM tablex');
        foreach ($query->result() as $row) {
            echo $row->title;
            echo $row->name;
        }

我确信$db我的数据库配置文件中的变量设置正确,我什至尝试为 autoload.php 配置文件中的所有页面自动加载数据库;仍然有同样的问题。任何想法如何去做?

4

2 回答 2

5

改变

$this->load->database();

$this->load->library('database');

数据库不是直接的方法。它是 codeigniter 中的一个库,您必须将其作为库加载。

您还可以databaseautoload.php.

更新:

您为您的类和方法使用相同的名称。在 PHP4 中,与类名同名的方法被视为构造函数,但如果您使用的是 codeigniter 2+,则必须使用 PHP5 构造函数,即

function __construct()
{
    parent::__construct();
    /*Additional code which you want to run automatically in every function call */
}

您不能在 Codeigniter 2+ 中为方法提供与类名相同的名称。将方法更改为其他任何方法。index如果您希望它默认加载,您可以命名该方法。

这应该可以解决您的问题。

于 2013-05-30T19:32:29.333 回答
3

CodeIgniter 用户指南,创建库部分:

要在您的库中访问 CodeIgniter 的本机资源,请使用 get_instance()函数。该函数返回 CodeIgniter 超级对象。通常在你的控制器函数中,你会使用$this结构调用任何可用的 CodeIgniter 函数。

但是, $this只能直接在您的控制器、模型或视图中工作。如果你想在你自己的自定义类中使用 CodeIgniter 的类,你可以这样做:

首先,将 CodeIgniter 对象分配给一个变量:

$CI =& get_instance();

将对象分配给变量后,您将使用该变量而不是$this

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc.

希望这可以帮助。您还可以将 $CI 放在构造函数中。

您的代码将如下所示:

class Tutorial
{
    public $CI;

    /**
     * Constructor.
     */
    public function __construct()
    {
        if (!isset($this->CI))
        {
            $this->CI =& get_instance();
        }
        $this->CI->load->database();
    }
}
于 2013-09-04T23:32:10.520 回答