[PHP][MySQL] 從MySQL取得資料 – fetch_array、fetch_assoc、fetch_row

在一些入門的php教學書籍裡,我們在擷取 MySQL 的資料時要使用的函數為 fetch 系列的函數,而在這系列中常會使用的是 fetch_array() 來把資料從資料表之中讀出並存入陣列之中,但是這個函數是會將資料讀出後將資料以兩種不同的Key值存入陣列之中,但有些時候我們在資料的使用上有特別的應用時該怎麼辦呢?請繼續閱讀來了解這三種函數的差異!

前言:

在SQL的資料讀取中,有三種不同的函數可以使用,分別是:

fetch_array():將讀出的資料同時以數字與欄位名稱各自存一次在陣列之中,相當於同一個值會出現兩次。

fetch_assoc():將讀出的資料Key值設定為該欄位的欄位名稱。

fetch_row():將讀出的資料Key值設定為依序下去的數字。

以前在一些php相關的教學書上遇到這個情境,通常都會直接告訴使用者使用fetch_array()這個函數來提取MySQL中的資訊,這個函數是可以同時讓你同時使用欄位名稱或依照順序的數字來取用資料,不過當資料量變得非常龐大的時候就會發現,還額外使用數字來當作Key值似乎沒有太大的用處,而且使用習慣後通常也都是取用欄位名稱作為Key值的資料,這時候就不需要數字做為Key值的資料了。

但在某些情境下可能又會需要使用數字來作為Key值,這就取決於程式設計上的邏輯有什麼需求了,因此話不多說,請直接參考實際範例,簡單明瞭每一種函數的差異,簡單省事!

三種 fetch 的實際範例:

資料表內容:

UID Name EMAIL PASSWORD
1 RicharLin Richar@richarlin.tw 1234567

使用 fetch_array() :

array(
  [0] => '1'
  [UID] => '1'
  [1] => 'RicharLin'
  [Name] => 'RicharLin'
  [2] => 'Richar@richarlin.tw'
  [EMAIL] => 'Richar@richarlin.tw'
  [3] => '1234567'
  [PASSWORD] => '1234567'
)

使用 fetch_assoc() :

array(
  [UID] => '1'
  [Name] => 'RicharLin'
  [EMAIL] => 'Richar@richarlin.tw'
  [PASSWORD] => '1234567'
)

使用 fetch_row() :

array(
  [0] => '1'
  [1] => 'RicharLin'
  [2] => 'Richar@richarlin.tw'
  [3] => '1234567'
)

後記:

其實正常情況下寫程式都習慣會用fetch_array(),因為它是最通用的使用方式,但有些時候如果你需要將一大筆輸出的資料轉換成JSON時,fetch_array()就會顯得有點累贅了…使用fetch_assoc()就可以獲得比較精簡的資料陣列。

而有些時候如果你需要將輸出的陣列依照編號使用時fetch_row()也將會是一個很適合的方式,可以輕易的計算數量並且按照數字依序進行,無疑是個不錯的選擇。

雖然平常沒遇到特殊的狀況時不會想到assoc和row,但是近期自己在寫程式的時候確實遇到了,所以特別將這幾個用法記錄下來!

參考資料:PHP.NET http://php.net/manual/en/mysqli-result.fetch-array.php

更多 PHP 相關文章 列表:https://richarlin.tw/blog/php/

1 thought on “[PHP][MySQL] 從MySQL取得資料 – fetch_array、fetch_assoc、fetch_row”

  1. Pingback: PHP - 文章列表 - RicharLin.Tw

Comments are closed.