0

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

2 回答 2

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;
}

LE:
@cipherous 在你的例子中:
它是$query->result()(返回一个对象数组)或$query->result_array()(返回一个数组数组)不是$query->result
如果你想要一行,你将使用$query->row()(object) 和$query->row_array()(array) 并且你不必循环它。

于 2013-06-20T19:59:29.060 回答
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

于 2013-06-20T20:00:32.633 回答