PHP错误:尝试获取非对象的属性

时间:2014-01-10 18:35:00

标签: php codeigniter

我在CodeIgniter框架中工作,我试图应用我在堆栈上找到的所有其他解决方案,但我无法使其工作,所以这是我的问题... 我试图从MySQL数据库表中检索一个基于uri段的“问题”记录。然后我试图在视图中显示此记录。据我所知,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);

模型data_model

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>

2 个答案:

答案 0 :(得分:3)

你应该使用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>

答案 1 :(得分:-1)

$records是一个数组,而不是一个对象,因此你不能$records->uname。你可能也认为$data

编辑:第二次看,它显示$data也是一个数组!可以通过['key']而不是->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