Codeigniter fetching data error: Trying to get property of non-object

Codeigniter fetching data error: Trying to get property of non-object

我正在使用 CI 从数据库中获取数据。每当我输出结果时,我总是得到一个错误和一个空值。错误是:

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: user/joinroomlanding.php
Line Number: 31

输出页面控制器:

public function joinroom(){
    $data['title'] = "User| Join Room";
    $data['message'] = $this->session->flashdata('message');
    $data['room'] = $this->user_model->joinRoom();

    if($this->session->userdata('is_logged_in') == 2 ){
        $this->load->view('include/header_user',$data);
        $this->load->view('include/navbar_user');
        $this->load->view('user/joinroomlanding');
        $this->load->view('include/footer_user');
    } else {
        redirect('restricted');
    }
}

输入验证:

public function joinRoomValidation(){
    $this->load->library('form_validation');
    $this->load->model('user_model');

    $this->form_validation->set_rules('roomCode', 'Room Code', 'required|xss_clean|numeric');


    if($this->form_validation->run() == true){
        if($this->user_model->joinRoom() == true){
            $this->session->set_flashdata('message', "<p class='alert alert-success'><span class='glyphicon glyphicon-ok' aria-hidden='true'></span> Room found successfully.</p>");
            redirect('joinroomlanding');
        } else {
            $this->session->set_flashdata('message', "<p class='alert alert-danger'><span class='glyphicon glyphicon-exclamation-sign' aria-hidden='true'></span> You need to enter a valid room code.</p>");
            redirect('user_roomlist');
        }
    } else {
        $this->session->set_flashdata('message', "<p class='alert alert-danger'><span class='glyphicon glyphicon-exclamation-sign' aria-hidden='true'></span> You need to enter a room code.</p>");
        redirect('user_roomlist');
    }
}

型号:

public function joinRoom(){
    $roomCode = $this->input->post('roomCode');
    $this->db->select('*');
    $this->db->where('room_code', $roomCode);
    $query =  $this->db->get('room');

    if($query->num_rows() == 1){
        return $query->row_array();
    } else {
        return false;
    }
}

joinroomlanding.php

 <div class="text-center"><?php echo $message;?></div>
     <div class="panel panel-green">
        <div class="panel-body">
          <div class="text-center">
             <h3><?php echo $room->room_name; ?></h3>
             <h3><?php var_dump($room->room_name); ?></h3>
             <h3><?php echo $room->room_code; ?></h3>
             <h3><?php echo $room->date_created; ?></h3>
          </div>
        </div>
     </div>
  </div>

本机 php 查询解决此答案(joinroomlanding.php):

$classCode=$this->input->post('classCode');
$sql= "SELECT * FROM class WHERE class_code='".$classCode."'";
$result= mysql_query($sql); 
while($row = mysql_fetch_array($result)) {
echo $row['class_name'];
echo $row['class_section'];
echo $row['class_description'];
echo $row['class_limit'];
}

我认为问题正在发生,因为您的模型正在使用 return 计算您的结果:row_array(),这意味着您的结果是数组格式,这意味着您需要使用 [] 类似于 $result['room_name'],但是,当您在视图中迭代这些结果时,您假设这些结果是对象形式,因此这样做:<?php echo $room->room_name; ?> ...

为了修复它,改变你的模型 return 方法:

...
if($query->num_rows() == 1){
        return $query->row_array();
} else {
...

对此:

...
if($query->num_rows() == 1){
        return $query->row();
} else {
...

来源:http://www.codeigniter.com/userguide3/database/results.html#result-rows

希望对您有所帮助。


更新:

要将其转换为 Codeigniter:

$classCode=$this->input->post('classCode');
$sql= "SELECT * FROM class WHERE class_code='".$classCode."'";
$result= mysql_query($sql); 
while($row = mysql_fetch_array($result)) {
 echo $row['class_name'];
 echo $row['class_section'];
 echo $row['class_description'];
 echo $row['class_limit'];
}

执行以下操作:分解模型、控制器和视图中的内容:

型号:

function model_method($classCode){
    $this->db->select();
    $this->db->from('class');
    $this->db->where('class_code', $classCode);
    $q = $this->db->get();
    return $q->result_array();
}

控制器:

function controller_method(){
    $classCode = $this->input->post('classCode');
    $this->load->model('model_name');
    $data['result'] = $this->model_name->model_method($classCode);
    $this->load->view('my_view', $data);
}

查看:

echo $result['class_name'];
echo $result['class_section'];
echo $result['class_description'];
echo $result['class_limit'];