【问题标题】:can't do queries undefined property不能查询未定义的属性
【发布时间】:2013-11-18 13:26:55
【问题描述】:

我是 CI 新手。只是想知道我哪里出错了。似乎我无法连接到我的数据库。所以我尝试在控制器中加载数据库,只是为了看看它是否可以连接并且我可以进行查询。我确实配置了database.php 并设置了所有内容。但它显示为这样。

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Blog::$db

Filename: controllers/blog.php

控制器/blog.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Blog extends CI_Controller {

    public function index() {
        $this->load->model("blogmodel");
        $articles = $this->blogmodel->get_articles_list();

        echo $articles;
    }
}

blogmodel.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Blogmodel extends CI_Model {

    function get_articles_list() {
        $list = $this->db->query("SELECT * FROM foo");
        return $list;
    }
}

希望你能帮助我。谢谢。

【问题讨论】:

  • 我没有看到您的模型负载,并且您对使用 MVC 结构的理解有误。查询时,您应该将所有语法放入模型中
  • 我没有使用任何模型。在我的代码前面,我确实使用 load() 来加载我的模型。但似乎有什么不对劲。我只是想尝试如何使用查询从数据库中获取数据。
  • 您是否尝试将标准构造函数添加到博客类?
  • 然后你需要调用 CI_Model 的构造函数,但是这个设置会破坏 CI 的目的。你应该练习分离控制器和模型或者只使用纯 PHP
  • Drixson 关于模型中数据库交互的一般 MVC 实践是正确的,但 CI 并不关心这一点。如果您已经加载了 db 模型,它应该可以在控制器中工作,即使它并不漂亮。问题是 - 您此时是否已自动加载数据库?如果没有在您的类中定义 __construct() 方法,它可能不会继承任何自动加载模型的属性。

标签: php codeigniter


【解决方案1】:

所以你有一个可以接受的答案:

最初的问题是您没有自动加载数据库库。在这个文件中:

application/config/autoload.php

您可以将数据库添加到列表中:

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

至于您的字符串问题 - get_article_list() 正在返回一个对象。您可以使用$articles-&gt;result() 来遍历结果,或者使用$articles-&gt;num_rows() 之类的东西来查看有多少结果,等等。

因此,在您回显 $articles 的地方,您可能打算回显如下内容:

foreach($articles->result() AS $article)
{
    echo $article->title . "<br>";
}

$article-&gt;title 显然已替换为文章表中的实际字段。

【讨论】:

    猜你喜欢
    • 2017-09-20
    • 2023-03-16
    • 2020-11-01
    • 2017-12-13
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多