【问题标题】:PHP Error: Trying to get property of non-objectPHP 错误:试图获取非对象的属性
【发布时间】:2014-01-10 18:34:59
【问题描述】:

我在 CodeIgniter 框架中工作,我尝试应用我在堆栈上找到的所有其他解决方案,但我无法让它工作,所以这是我的问题...... 我正在尝试根据 uri 段从名为“问题”的 MySQL 数据库表中检索记录。然后我试图在视图中显示这条记录。据我所知,uri 段被传递到它需要的任何地方,并从数据库中检索记录。 在我看来,当我试图从控制器访问数据时,问题就出现了。 我在'view_thread_view'中的循环中的每个回声都得到的错误是

遇到了 PHP 错误

严重性:通知

消息:试图获取非对象的属性

文件名:views/view_thread_view.php

任何解决方案将不胜感激。

这是我的代码:

控制器线程

function view_thread()
    {
        $quest = $this->uri->segment(3);
        echo $quest;// for checking if uri segment is passed

        if($query = $this->data_model->get_thread($quest))
        {
            $data['records'] = $query;      
        }

        $this->load->view('view_thread_view', $data);

模型数据模型

public function get_thread($quest)
   {
    if($q = $this->db->get_where('questions' , 'qid' , $quest));
    {
      return $q;
    }
   }

查看 view_thread_view

<div title="question_view">
    <h1>Question View<h1>
        <?php foreach($records as $data) : ?>
        <div>
            <h2>Title</h2>
            <?php 
            echo $data->title;
            ?>
        </div>
        <div>
            <h2>Question</h2>
            <?php
            echo $data->contents
            ?>
        </div>
        <div>
            <h2>Tags</h2>
            <?php
            echo $data->tags
            ?>
        </div>
        <div>
            Thread owner
            <?php
            echo $records->uname
            ?>
        </div>
    <?php endforeach; ?>
</div>

编辑:问题已回答

感谢 Girish Jangid 解决了这个问题,这是工作代码:

控制器

function view_thread()
    {
        $quest = $this->uri->segment(3);
        echo $quest;// for checking if uri segment is passed
        //$data = array();
        if($query = $this->data_model->get_thread($quest))
        {
            $data['records'] = $query;      
        }

        $this->load->view('view_thread_view', $data);
    }

型号

public function get_thread($quest)
   {
    if($q = $this->db->get_where('questions' , array('qid' => $quest)));
    {
      return $q;
    }

   }

查看

<div title="question_view">
    <h1>Question View<h1>

        <?php foreach($records->result() as $data) : ?>
        <div>
            <h2>Title</h2>
            <?php 
            echo $data->title;
            ?>
        </div>
        <div>
            <h2>Question</h2>
            <?php
            echo $data->contents
            ?>
        </div>
        <div>
            <h2>Tags</h2>
            <?php
            echo $data->tags
            ?>
        </div>
        <div>
            Thread owner
            <?php
            echo $data->uname
            ?>
        </div>
    <?php endforeach; ?>

</div>
</div>

【问题讨论】:

  • 返回的是什么? $this->data_model->get_thread($quest)
  • 现在代码正在运行,它正在从数据库中返回一条记录,其中 'qid' 与 $quest 匹配。并且 $quest 包含 uri 段(3)

标签: php codeigniter


【解决方案1】:

你应该使用 db 函数来获取结果,请使用 CodeIgniter db Query Results 函数,像这样

 if($records->num_rows() > 0){
      foreach($records->result() as $data){
        if(isset($data->title)) echo $data->title;
      }
    }

更多细节请阅读 CodeIgniter 查询结果函数 Query Results

试试这个代码

<div title="question_view">
    <h1>Question View<h1>
        <?php if($records->num_rows() > 0) { ?>  
        <?php foreach($records->result() as $data) : ?>
        <div>
            <h2>Title</h2>
            <?php 
            echo $data->title;
            ?>
        </div>
        <div>
            <h2>Question</h2>
            <?php
            echo $data->contents
            ?>
        </div>
        <div>
            <h2>Tags</h2>
            <?php
            echo $data->tags
            ?>
        </div>
        <div>
            Thread owner
            <?php
            echo $records->uname
            ?>
        </div>
    <?php endforeach; ?>
    <?php } ?>
</div>

【讨论】:

  • 您不必使用 Active Record 函数,您可以执行原始查询,这在大多数情况下比使用 ActiveRecord 稍快。
  • 你是对的,但他没有使用结果函数来获取记录
  • 这实际上似乎有效,谢谢。但是,我的数据库查询存在问题......它必须不返回任何结果,因为视图中不显示任何内容。有什么想法吗?
  • @Thomas 请在模型 $this->db->get_where('questions' , array('qid' => $quest)) 中尝试此代码
  • 很想投票但没有足够的代表:(关于我上面提到的数据库问题的任何想法?
【解决方案2】:

$records 是一个数组,而不是一个对象,因此你不能做$records-&gt;uname。你可能也指$data

编辑:再看一遍,$data 似乎也是一个数组!数组通过['key']而不是-&gt;key访问

另外,您的代码过于复杂。

<?php 
foreach($records as $data){
   $string = <<<STR
   <div>
      <h2>Title</h2>
      {$data['title']}
    </div>
    ...etc
STR;
    echo $string;
}

http://www.php.net/manual/en/language.types.string.php

【讨论】:

  • 感谢快速回答,进行了代码调整,我有一个新错误遇到了一个 PHP 错误严重性:通知消息:未定义索引:标题文件名:views/view_thread_view.php
  • 尝试在您的 foreach 循环中执行 var_dump($data); 并将结果发布到您的问题中。
  • 答案是错误的,你应该使用 CodeIgniter 查询结果函数来提取记录。 [链接] (ellislab.com/codeigniter/user-guide/database/…)
  • 好的,我看到还有一个问题...查询返回这个类型的资源(30)(mysql链接持久)资源(37)类型(mysql结果)数组(0){}数组(0) { } 数组(0) { } int(0) int(0) NULL
  • 所以如果是对象而不是数组,那么使用->key。我的回答是 $records 是一个数组。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多