CodeIgniter 使用手冊版本 2.2.0


產生查詢結果

底下有幾種方法可以產生查詢結果:

result()

這函數會回傳一個陣列物件(objects),或者失敗時會是空陣列。 一般狀況可以使用 foreach 迴圈,就像底下:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result() as $row)
{
   echo $row->title;
   echo $row->name;
   echo $row->body;
}

上述 函數 的別名是 result_object()

假如您的查詢可能不會產生結果,我們建議您先用下面方式進行判斷:

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->title;
      echo $row->name;
      echo $row->body;
   }
}

You can also pass a string to result() which represents a class to instantiate for each result object (note: this class must be loaded)

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $row)
{
   echo $row->name; // call attributes
   echo $row->reverse_name(); // or methods defined on the 'User' class
}

result_array()

此函數會回傳查詢的陣列資料,或者當查無資料會回傳空陣列。一般狀況可以使用 foreach 迴圈,就像底下:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

row()

此函數會回傳單筆陣列資料。假如您查詢的資料超過一筆,它只會回傳第一筆資料。 結果會回傳單一 物件(object)。參考範例:

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0)
{
   $row = $query->row();

   echo $row->title;
   echo $row->name;
   echo $row->body;
}

如果您想要回傳特定的第幾筆資料,可以設定第一個參數為您想要的該筆資料:

$row = $query->row(5);

You can also add a second String parameter, which is the name of a class to instantiate the row with:

$query = $this->db->query("SELECT * FROM users LIMIT 1;");

$query->row(0, 'User')
echo $row->name; // call attributes
echo $row->reverse_name(); // or methods defined on the 'User' class

row_array()

同等於上述 row() 函數,不同的是它回傳是陣列. 參考範例:

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0)
{
   $row = $query->row_array();

   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

如果您想要回傳特定的第幾筆資料,可以設定第一個參數為您想要的該筆資料:

$row = $query->row_array(5);

除此之外,您可以進而利用底下方式查詢到第一筆/最後一筆/下一筆/或者是前一筆資料:

$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()

預設回傳值為物件,除非設定第一個參數為陣列資料:

$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')

回傳結果補助函數

$query->num_rows()

回傳查詢資料行數. 注意: 在這例子裡面,$query 是您查詢語法之後所回傳物件的變數:

$query = $this->db->query('SELECT * FROM my_table');

echo $query->num_rows();

$query->num_fields()

回傳查詢結果所產生的欄位行數。務必確定使用查詢所回傳物件的變數:

$query = $this->db->query('SELECT * FROM my_table');

echo $query->num_fields();

$query->free_result()

釋放查詢結果所產生的記憶體,以及刪除物件變數ID。基本上PHP會在程式全部執行完成後自動釋放記憶體。 然而,假如您在單一PHP檔案執行了多個查詢,就必須要釋放每一次查詢所消耗的記憶體空間。參考範例:

$query = $this->db->query('SELECT title FROM my_table');

foreach ($query->result() as $row)
{
   echo $row->title;
}
$query->free_result(); // $query 物件將不再使用了

$query2 = $this->db->query('SELECT name FROM some_table');

$row = $query2->row();
echo $row->name;
$query2->free_result(); // $query2 物件將不再使用了