2012-02-29 11 views
0

は私の単純なGET機能である:CodeIgniterのクエリ

function test_get() 
{ 
    if(!$this->get('id')) 
    { 
     $this->response(NULL, 400); 
    } 

    $query = $this->db->query('select * from test'); 
    $users = $query->result(); 

    $user = @$users[$this->get('id')]; 

    if($user) 
    { 
     $this->response($user, 200); // 200 being the HTTP response code 
    } 

    else 
    { 
     $this->response(array('error' => 'User could not be found'), 404); 
    } 
} 

それは、これまでに動作しますが、私はなぜわからないんだけど「私は、私は結果として、ID 3を取得していますhttp://.../test/id/2を開くと、私はhttp://.../test/id/1

<xml><id>2</id><attribut1>Testdata</attribut1><attribut2>asdfasdf</attribut2><testcol>asf</testcol></xml> 

を開いたときに、結果として、ID 2を取得メートル。

すべきではありませんhttp://.../test/id/1 - > id 1?

答えて

1

これはオフバイ・ワンの問題です。 $users配列(ゼロベース)のインデックスを作成していますが、IDは1から始まります。ユーザーIDにギャップがある場合は、さらに悪い問題が発生します(1つではなく、ランダムに増分されます)。これを代わりに試してみてください:

function test_get() 
{ 
    if(!$this->get('id')) 
    { 
     $this->response(NULL, 400); 
    } 

    $user = $this->db->where('id', $this->get('id'))->get('test')->first_row(); 

    if($user) 
    { 
     $this->response($user, 200); // 200 being the HTTP response code 
    } 

    else 
    { 
     $this->response(array('error' => 'User could not be found'), 404); 
    } 
} 
+0

確かに、配列はゼロベースです!あなたの例が解決策です。どうもありがとう :) – milepile

関連する問題