fetchとは抽出したデータのキーを列名にするのか、従来の配列のような[ 0 ]といった数字で管理するのか、あるいは両方のキーを持つのか、といったデータのキーのつけ方を指定するもののようです。
ここで注意しなければならないのは、このfetchの指定にかかわらずデータは抽出されるし、キーはつけられているということです。
fetchの指定には3パターンあるようです。
1)fetchAll(PDO::FETCH_ASSOC)
2)fetchAll(PDO::FETCH_NUM)
3)fetchAll(PDO::FETCH_BOTH)
それぞれについて表示するforeachとあわせて、見ていきましょう。
1)のfetchAll(PDO::FETCH_ASSOC) は一般的な使い方で、列名をキーであらわす連想配列です。
Allがついているとおり、すべてのデータを指定しています。
2)のfetchAll(PDO::FETCH_NUM)はキーは配列によくみられる0からはじまる[ ]がついた配列です。
3)のfetchAll(PDO::FETCH_BOTH)はBOTHがついているように、上のふたつの書き方を持っています。
1)fetchAll( PDO::FETCH_ASSOC)
一般的にはこれを使うのではないかと思います。
キーに配列名がついて使いやすいと思います。
表示するforeachも列名で表示するので簡単です。
これはprint_rで内容を表示したものですが、連想配列になっていることがわかります。
2)fetchAll(PDO::FETCH_NUM)
これはキーを列名ではなく [ 0 ]のような、配列でよくみられる[ ] の中の0からはじまる数字で示します。
上のASSOCとよく似ていますがキーの表示が違います。
foreachは[ ] 内に数字を入れるので、少し工夫が必要です。
表示は上と同じものが表示されます。
3)fetchAll(PDO::FETCH_BOTH)
これはBOTHという文字のとおり1)と2)の両方を持っています。
print_rでみるとデータはこのようになっています。
foreachでみるとこのように同じデータが表示されます。
両方の方式で取得するのでデータ量が倍になります。
大きなデータになるとPCに負担がかかると思います。
とくべつな使用目的がない場合以外は、使う必要はないと思います。
fetchAll()というかき方をする場合もあるようです。
この場合はデフォルトのBOTHが適用されるようです。
fetch()だけを書いている場合もあります。
このときは一行だけの取得になります。
最後にもうひとつだけforeachの中に直接書く場合があります。
この場合もBOTHが適用されるようです。
これは返り値が配列であるということを利用したものです。
書きなれた方はこのような書き方をするようです。
参考書を調べながら、いろいろ書いてきました。
初心者が勉強がてら書いたので、わかりにくかったと思います。
また間違っているところがあるかもしれません。
fetchとforeachの練習をするひとつのきっかけになればと思って投稿させていただきました。
ありがとうございました。