我有一个问题,它应该很简单,但我似乎无法解决它。我试图通过搜索数据库中的用户名从用户获取用户ID。但我只是得到一个空值..请让我知道我可能做错了什么。
以下是查询的代码:
private function get_u_id($user){
$sql = "SELECT * FROM users WHERE 'username'=?";
$query = $this->db->query($sql, array($user));
foreach($query->result as $row){
return $row['id'];
}
}
我将此信息存储在会话中,所以这是代码:
$user_session_data = array(
'user'=>$p_info['username'],
'email' => $this->get_user_email($p_info['username']),
'u_id' => $this->get_u_id($p_info['username']),
'validated' => TRUE
);
//set a session, (username, email, user_id)
private function set_session($user_data) {
$this->session->set_userdata($user_data);
}
当我使用print_r()输出此会话时,它看起来像这样
[user_data] => [user] => wilprim [email] => [u_id] => [validated] => 1
答案 0 :(得分:1)
您也可以尝试使用CI的活动记录类来实现您的需求,但是以更清洁的方式,例如:
private function get_u_id($user){
$query = $this->db->select('id')->from('users')->where('username', $user)->limit(1)->get();
return $query->num_rows() > 0 ? $query->row()->id : 0;
}
L.E:
在你的例子中@cipherous:
它是$query->result()
(返回一个对象数组)或$query->result_array()
(返回一个数组数组)而不是$query->result
。
如果你想要一行,你将使用$query->row()
(对象)和$query->row_array()
(数组),你不必循环它。
答案 1 :(得分:1)
查询中的引号不正确:
$sql = "SELECT * FROM users WHERE 'username'=?";
^-- ^--
'username'
是 STRING ,而不是字段名称。 username
也不是保留字,所以绝对没有必要引用它。
用户之一:
$sql = "SELECT * FROM users WHERE `username`=?"; // note the backticks
$sql = "SELECT * FROM users WHERE username=?"; // no quotes at all
如上所述,您的查询返回任何数据的唯一方法是,如果您的用户的用户名字面为username
。