PHP错误:尝试获取非对象的属性
我在CodeIgniter框架中工作,我试图应用我在stack上找到的所有其他解决方案,但我无法使其工作,所以这里是我的问题。。。 我试图从MySQL数据库表中检索一条基于uri段的名为“questions”的记录。然后我尝试在视图中显示此记录。据我所知,uri段被传递到它需要的任何地方,记录从数据库中检索。 在我看来,当我试图从控制器访问数据时,问题出现了。 “视图\线程\视图”中循环中的每个回显都会出现错误 遇到一个PHP错误 严重性:通知 消息:正在尝试获取非对象的属性 文件名:views/view\u thread\u view.php 任何解决方案都将不胜感激 这是我的密码: 控制器线程PHP错误:尝试获取非对象的属性,php,codeigniter,Php,Codeigniter,我在CodeIgniter框架中工作,我试图应用我在stack上找到的所有其他解决方案,但我无法使其工作,所以这里是我的问题。。。 我试图从MySQL数据库表中检索一条基于uri段的名为“questions”的记录。然后我尝试在视图中显示此记录。据我所知,uri段被传递到它需要的任何地方,记录从数据库中检索。 在我看来,当我试图从控制器访问数据时,问题出现了。 “视图\线程\视图”中循环中的每个回显都会出现错误 遇到一个PHP错误 严重性:通知 消息:正在尝试获取非对象的属性 文件名:views
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;
}
}
视图线程视图
<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>
模型
看法
问题视图
标题
问题:
标签
线程所有者
$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;
}
您应该使用db函数获取结果,请使用CodeIgniter db查询结果函数,如下所示
if($records->num_rows() > 0){
foreach($records->result() as $data){
if(isset($data->title)) echo $data->title;
}
}
有关更多详细信息,请阅读CodeIgniter查询结果函数
试试这个代码
<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函数,您可以执行原始查询,这在大多数情况下比使用Active Record略快。您是对的,但他没有使用结果函数来获取记录。这实际上似乎很有效,谢谢。但是,我的数据库查询存在问题。。。它必须不返回任何结果,因为视图中不显示任何内容。有什么想法吗?@Thomas请在$this->db->get_模式中尝试此代码,其中('questions',array('qid'=>$quest))很想投票,但没有足够的代表:(关于我上面提到的db问题,有什么想法吗?Thx快速回答,进行了代码调整,我遇到了一个新错误PHP错误严重性:注意消息:未定义索引:标题文件名:views/view\u thread\u view.phpTry dovar\u dump($data);
在foreach循环中,将结果发布到问题中。答案是错误的,您应该使用CodeIgniter查询结果函数来检索记录。[link]()好的,我看到还有另一个问题……查询返回类型为(mysql链接持久)的资源(30)类型为(mysql结果)数组(0){}数组(0){}数组(0){}数组(0){int(0)int(0)NULLSo如果它是一个对象而不是一个数组,那么使用->键。我的答案是$records是一个数组。它返回什么?$this->data\u model->get\u thread($quest)现在代码工作了,它从数据库返回一个记录,其中'qid'匹配$quest。并且$quest包含uri段(3)
<?php
foreach($records as $data){
$string = <<<STR
<div>
<h2>Title</h2>
{$data['title']}
</div>
...etc
STR;
echo $string;
}
if($records->num_rows() > 0){
foreach($records->result() as $data){
if(isset($data->title)) echo $data->title;
}
}
<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>