1

CodeIgniter を使用して MVC アプローチを学習しようとしていますが、SQL クエリの結果をビューに表示しようとして困っています。SQLクエリを書くときに変数をエスケープすることで安全だと聞いたので、メソッドバインディングの方法を使用しています。

モデルは次のとおりです。

public function getuser_id()
{
    $this->db->select('id')->from('users')->where('email', $this->session->userdata('email'));
    $query = $this->db->get();
}

コントローラーは次のとおりです。

public function members()
{
    if ($this->session->userdata('is_logged_in'))
    {
        $data['title'] = 'Members Page';
        $this->load->model('model_users');
        $data['uid'] = $this->model_users->getuser_id();
        $this->load->view('members', $data);
    }
    else 
    {
        redirect('main/restricted');
    }
}

ビューは単純echo $uid;です。私がしたいのは、ユーザー ID を画面に表示することだけです。問題はgetuser_id()機能にあると思います。プロファイラーは、クエリがページで実行されていることを示していますが、結果が表示されません。データは間違いなくデータベースに存在します。

どんな助けでも大歓迎です!

4

1 に答える 1

2

コードにいくつかの問題があります。

まず、モデルで直接セッションにアクセスする代わりに。コントローラでアクセスし、getuser_id()関数のパラメータとしてモデルにデータを渡す必要があります。

次に、クエリを作成していますが、クエリからデータを返していません。これを行うには、行を修正する必要があります。

$query = $this->db->get();

好みに応じて、次のいずれかになります。

$query = $this->db->get()->result(); //returns results as an object $query = $this->db->get()->result_array(); // returns results as an array

結果を返す方法の詳細については、こちらをご覧ください。 http://ellislab.com/codeigniter/user-guide/database/results.html

第三に、モデルからコントローラーにデータを戻さないでください。return $your_dataモデル関数の最後にを追加する必要があります。

更新されたモデル:

public function getuser_id($user_email)
{
    $this->db->select('id')->from('users')->where('email', $user_email);
    $query = $this->db->get()->result_array();

    return $query; // Don't forget to return your results!

}

コントローラは次のとおりです。

public function members()
{
    if ($this->session->userdata('is_logged_in'))
    {
        $data['title'] = 'Members Page';
        $this->load->model('model_users');
        $user_email = $this->session->userdata('email');
        $data['uid'] = $this->model_users->getuser_id($user_email);
        $this->load->view('members', $data);
    }
    else 
    {
        redirect('main/restricted');
    }
}
于 2013-03-22T04:07:44.373 に答える