【PHP学習】「fetch(PDO::FETCH_ASSOC)」の簡単な説明(備忘録)

20220219_php_icon_130857.png PHP

PHP学習している時に、すぐに忘れる「fetch(PDO::FETCH_ASSOC)」についての備忘録です。

fetchとは

fetchとは「連れ[取り]に行ってくる、連れて[取って]くる」といった意味あるので、今回のPHPの場合はデータを取ってくるというイメージになります。

fetch(PDO::FETCH_ASSOC)とは

さっそく本題で「fetch(PDO::FETCH_ASSOC)」とはデータベースから該当した条件のデータを1件だけ取ってきます。

そして、呼び出してきたデータを格納する時にカラム名で添字を付けた配列で返ってきます。

簡単に言うとこんな感じです。次のようなデータがあるとします。

id 名前 アドレス 年齢
1 太郎 taro@xxx.com 44
2 次郎 jiro@xxx.com 33
3 三郎 sabro@xxx.com 22

このデータの中で「40歳以下のデータがあるか?」というSQL文でデータを呼び出した時に次のように帰ってきます。

$data = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($data);
  • 結果
Array (
    [id] => 2
    [名前] => 次郎
    [アドレス] => jiro@xxx.com
    [年齢] => 33
)

というように、条件に該当した一番最初の行(2行目)だけ取得します。

メリットは何なのか?

コレだけ見て「だから何?」と思う人もいると思いますが、ちゃんと使い方がありまして、メリットとしては「条件に合致するデータがあるか?ないか?」のバリデーションチェックの時に使ったりします。

ちなみに一覧表示なのですべてのデータを使いたい時は「fetchALL」を使うことですべてのデータを取得できます。

fetchの中にある「PDO::FETCH_ASSOC」とは

もう一つ気になるのが、fetchの中にある「PDO::FETCH_ASSOC」ですが、データを取得する時の、受け取り方を指定してます。

どういうことかと言うと「fetch()」を指定した場合デフォルトでは「PDO::FETCH_BOTH」がセットされています。

つまり「fetch(PDO::FETCH_BOTH)」となっているということです。

「PDO::FETCH_BOTH」とは、データを取得する時に、「カラム名」と「0から始まるカラム番号」の配列を返します。

それに対して「PDO::FETCH_ASSOC」を指定すると「カラム名」の配列を返します。

先ほど使ったデータで名前の部分に対して、「fetch(PDO::FETCH_BOTH)」と「PDO::FETCH_ASSOC」の結果を見てみます。

  • fetch(PDO::FETCH_BOTH)の場合
array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(12) "太郎"
    [0]=>
    string(12) "太郎"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(6) "次郎"
    [0]=>
    string(6) "次郎"
  }
  [2]=> 
  array(3) {
    ["name"]=>
    string(6) "三郎"
    [0]=>
    string(6) "三郎"
  }
}
  • fetch(PDO::FETCH_ASSOC)の場合
array(3) {
  [0]=>
  array(1) {
    ["name"]=>
    string(12) "太郎"
  }
  [1]=>
  array(1) {
    ["name"]=>
    string(6) "次郎"
  }
  [2]=>
  array(1) {
    ["name"]=>
    string(6) "三郎"
  }
}

fetch(PDO::FETCH_BOTH)の方に「添え字」と「カラム」に対してそれぞれ値が入ってきているのが分かると思います。

それに対して、fetch(PDO::FETCH_ASSOC)の方では「カラム」だけが入ってきています。

どのように使うのか?

「結局、何なのか?」と言うと「fetch(PDO::FETCH_ASSOC)」を使うことで「取得するデータ量が減る」って言うことです。

fetchの場合だと1つのデータしか返してこないのであまりメリットはないですが、fetchALLを使った場合すべてのデータを取得してくるので、データ量が多すぎるとサーバへの負荷も上がります。

そのため、fetchALLを使う時には「fetchALL(PDO::FETCH_ASSOC)」を基本的に使った方がサーバへの負荷が減るので、そういった使い方になると思います。

ちなみに、添え字だけを取得したい場合は「PDO::FETCH_NUM」があります。

参考URL

以下のサイトを参考にさせていただきました。

わかっているようでわからない、PHPのFETCHを解説!

以上です。ありがとうございました。

コメント

タイトルとURLをコピーしました