在运行query,codeigniter时无法从数据库中检索用户信息

时间:2013-06-20 19:53:58

标签: php mysql codeigniter

我有一个问题,它应该很简单,但我似乎无法解决它。我试图通过搜索数据库中的用户名从用户获取用户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 

2 个答案:

答案 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