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'];
我正在使用 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'];