【PHP日記】

自分の知識不足を悟った末、なるべく1日一回、Webに関する知識を書いていくだけのブログ。

FETCH_ASSOC で躓いたところ 【28日目】


fetch_assocは、データベースから取得したオブジェクトを連想配列の形で返すコマンドですが、具体的にはデータベースから取得した1行ぶんのレコードを連想配列にして返す、という挙動を取ります。

    $stmt = $this->dbh->prepare($sql);
    $res = $stmt->execute($arrVal);

    $data = [];
    while ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
      array_push($data, $result);
    }
    return $data;

『1行のデータを配列にして返す処理』を1まとまりとして、それを繰り返しているため、$result には1行のレコードが連想配列になったものが格納されることになります。


そのため、$dataの中身は連想配列の多次元構造になります。

[
  [
    'id' => '1',
    'username' => 'user1',
    'email' => 'user1@example.com'
  ],
  [
    'id' => '2',
    'username' => 'user2',
    'email' => 'user2@example.com'
  ]
]

これは、レコードが1行しかなかった場合でも同じです。

[
  [
    'id' => '1',
    'username' => 'user1',
    'email' => 'user1@example.com'
  ]
]


そのため、中のデータを取り出したい場合は、インデックスを指定した上で、キーを指定する必要があります。

return $data[0]['username'];



以上です。