【初心者向け】「fetch」を使って配列を取得する方法

こんにちは、

webデザインについても特訓中のサトウです。

さて、本題に入りたいと思います。

phpやデータベースの学習を進めていくと「fetch」というワードを目にする機会も増えてくるのではないでしょうか。何となく「クエリの実行後に書くもの」ということは分かっていても、詳細について理解できない方も少なくないのでは、、、。と思い、今回は「fetch」について分かりやすく説明していきます。

phpやデータベースについて学び始めた方や、「fetch」について分からない方は、是非読んでみてくださいね。

「fetch」とは

fetchとは、PDOオブジェクトでデータベースからデータを取り出した際に「配列の形式を指定できる」ことを指します。SQLを実行してその結果を取得する時に「どのような形式で結果が欲しいか」に合わせて指定する必要があります。PDOオブジェクトを使用した際は以下の流れの中でfetchを使用します。

(例)データベースからデータを取得する場合

・PDOオブジェクトでデータベース接続
・SQLの実行準備
・SQL文(データベースへの指示内容)の作成
・SQLの実行
クエリの実行結果を取得(FETCH_ASSOCやFETCH_ALLで取得形式を指定)

またfetchを指定しなくてもデータ取得可能ですが(デフォルトのfetchモードが適用されます)、データの取得形式を指定することで無駄なく必要なデータだけ取り出すことが可能です。

データベースから配列を取得してみよう!

ここからはfetchを使って実際にデータベースからデータを取得してみましょう。
以下の情報を元にfetchでデータ取得する方法を解説していきます。

テーブル情報

データベース名:mysql_test2
テーブル名:users
usersテーブルの各カラム:id,username,livingarea,age,create_date

usersテーブルのデータ情報

処理の流れ

(1)DBへ接続の準備
(2)PDOオブジェクトを生成してDB接続
(3)SQL文の作成
(4)SQLの実行:queryメソッドで実行し、変数stmt(statementの略)に結果を入れる
(5)取得結果をfetchを使って指定する
(6)結果があれば、print_rで表示。中身がなければ’結果なし’と表示
参考:ユーザー入力が伴う場合はprepareメソッド、プレースホルダ、executeメソッド等も併せて使用しましょう。

サンプルコード

※fetchの書き方が変わるため(3)(5)の部分を変えて、以下のケースに応じて解説していきます。

「カラム名」と「連番」を返す場合(デフォルト)

「カラム名」と「連番」を表示する場合は「fetchAll」と「FETCH_BOTH」を使用します。
以下ではidが3のユーザーを抽出してみます。

サンプルコード

※(5)でFETCH_BOTHを指定しています。

実行結果

MySQL上での結果画面

MySQL上で実行した結果は対象の行が1行ですが、画面出力するとカラム名と併せて連番[1]〜[4]も併せて取得できていますね。
FETCH_BOTHでもデータ取得可能ですが、データを2倍保持することになるのでリソースを無駄にしてしまいます。

1行だけデータを取得したい場合

1行だけ結果を取得したい場合は「fetch」「FETCH_ASSOC」を使用します。
以下では「idが2」のユーザーを取得してみます。

サンプルコード

※(5)がFETCH_ASSOCを指定している箇所です。

実行結果

MySQL上での結果画面

今回はSQLで「idが2」の条件を指定し、対象の行が取得できていますね。
テーブルから特定のユーザーだけ取り出したい時は非常に効果的な書き方です。

結果を取得しそれが複数存在する場合

条件に合う行が複数存在する場合は「fetchALL」と「FETCH_ASSOC」を使用します。
fetchではこの書き方が最もベーシックな記述方法です。以下ではlivingareaが「北海道」のユーザーを抽出してみます。

サンプルコード

※(5)がFETCH_ASSOCを指定している箇所です。

実行結果

MySQL上での結果画面

livingareaが北海道のユーザーだけ抽出できました。
取得した値の中身は、2次元配列になっています。([0][1][2]を添字にした配列の中にさらに配列が入っている状態です。)

指定した1行だけ1次元配列で取得したい場合

指定した1つのカラムだけ取得したい場合は「fetchAll」「FETCH_COLUMN」を使用します。
以下ではユーザーの「age」というカラム情報だけ取得してみます。

サンプルコード

※(5)がFETCH_COLUMNを指定している箇所です。

実行結果

MySQL上での結果画面

テーブルから各ユーザーの「age」に関するデータだけ取得できましたたね。

概ねfetchでこの4パターンを書き分けることができれば、データベースから必要なデータは取得することができます。
テーブルから「どのデータをどの形式で取得したいか」に応じて、使い分けながら練習してみてください。

まとめ

いかがでしたか?今回は、「fetch」について説明しました。

プログラミングを学び始めた頃は、「fetch」の書き方や「どのパターンで値(配列)を取得するのが良いか」難しく感じることあると思います。ですが、まずは今回のような情報が少ないテーブルを使ってコード書いていけば簡単に使えることができる日が来ると思うので、焦らずにゆっくりと理解を深めていってくださいね

この記事が、皆様のプログラミング学習に役立つと嬉しいです。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?