0

問題が発生しています。非常に単純なはずですが、修正できないようです。データベースでユーザー名を検索して、ユーザーからユーザー ID を取得しようとしています。しかし、私はちょうどnull値を取得しています..何が間違っているのか教えてください。

クエリのコードは次のとおりです。

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: (オブジェクトの配列を返す) または (配列の配列を返す) ではありません。 単一の行が必要な場合は、(object) と(array) を使用し、それをループする必要はありません。
$query->result()$query->result_array()$query->result
$query->row()$query->row_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 に答える