当数据库中的结果对象没有返回任何行时,就会出现这种错误,因此stdClass为空,因此您将无法访问任何属性。正确的方法是检查
num_rows()
等于1(例如,只有一个用户具有该名称和密码)。
public function login() {
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required|min_length[5]');
if ($this->form_validation->run() == TRUE) {
$username = $_POST['username'];
/**
* Do not md5 your passwords!
* Use password_hash and password_verify!!
*/
$password = md5($_POST['password']); // DO NOT MD5 your passwords!
//check user in db
// this should be in a model!
$this->db->select('*');
$this->db->from('users');
$this->db->where(array('username' => $username, 'password' => $password));
$query = $this->db->get();
if ($query->num_rows() == 1) {
$user = $query->row();
$this->session->set_flashdata("success", "You are logged in.");
$_SESSION['user_logged'] = TRUE;
$_SESSION['username'] = $user->username;
//redirect to profile page
redirect("user/profile", "refresh");
} else {
$this->session->set_flashdata("error", "NO such account exists");
//redirect("auth/login", "refresh");
}
}
$this->load->view('login');
}
一般来说,你应该养成检查
num_rows() > 0
在使用之前
result()
row()
,因为您永远无法百分之百确定数据是否会返回。
例如:
//model
function get_users() {
$query = $this->db->get('users');
if ($query->num_rows() == 0) {
return null;
}
return $query->result();
}
// controller
function something() {
$users = $this->model->get_users();
if (is_null($users)) {
exit('no users');
}
print_r($users);
}