PHPでSQLの結果を全て一度に受け取れるfetchAllの使い方

PHPのプログラムでデータベースの検索結果を利用するなら、fetchAllメソッドを利用されてはいかがでしょうか。fetchAllを利用することで、データベースで検索した全ての結果を一度に取り出せます。

とはいえ、使い方がよく分からない、という方もいるでしょう。今回は、PHPのデータベースを活用するための標準PDOライブラリで使えるfetchAllについて解説します。

PHPでDBの検索結果を受け取るには

PHPを利用してデータベースと連携したWebシステムを開発する場合、CakePHPのようなフレームワークを利用するか、標準で使えるPDOを利用するのが一般的です。

では、データベースの検索結果を、PHPのプログラムの中で利用するにはどうすればいいでしょうか。最も簡単な方法は
データベースから受け取ったデータを全て1つの配列に入れ、それをPHPのプログラム内で加工する方法です。

fetchAllはこのような用途のメソッドですが、このメソッドを解説する前にPHPからデータベースを参照し、そのデータを受け取るまでの処理について解説します。

PHPとデータベースの関係

WebサーバーでPHPがどのように動作しているかご存じでしょうか。通常PHPは、HTTPサーバーとは別のプロセスとして動作し、その結果をHTTPサーバーが受け取ってWebブラウザに送ります。

データベースの管理ソフトもHTTPサーバーやPHPのプロセスとは別に動作しており、プロセス間通信の仕組みを利用して連携しています。そのため
PHPからデータベースを利用する場合、1つのSQLをデータベースに送り、その結果を1回で受け取るのが一般的です。

PHPでDBを操作するならPDO

もしPHP用のフレームワークを利用せずにデータベースと連携するなら、PHPの標準で利用できるPDO(PHP Data Objects)を利用してください。

PHPからデータベースを利用する場合、以前はデータベースに合わせたドライバを組み込み、それによって組み込まれる専用の関数を使っていました。今でもそのような関数を使えますが、PDOを介してデータベースを利用するが一般的です。

また、
PDOには、データベースから受け取ったデータを取り出すためのメソッドが幾つか用意されており、受け取ったデータをまとめて配列に入れて返すメソッドが今回取り上げるfetchAllメソッドです。

フレームワークでも受け取れる

PHPをWeb開発に利用する場合、よくフレームワークが使われています。なおフレームワークとは「枠組み」といった意味があり、Web開発で使われるフレームワークにはWebシステムで必要とされる機能があらかじめ組み込まれています。

そのため組み込まれた機能を組み合わせるだけで簡単にWebシステムが作れる仕組みとしてよく利用される仕組みです。今使われているWebシステムにデータベースは欠かせません。そのため今使われているフレームの多くでデータベースにアクセスする機能が充実しています。

例えばPHPのフレームワークとしてよく利用されていた
CakePHPでは、データベースにアクセスするためのクラスが用意されており、そのクラスに定義されたfetchAllメソッドを利用することで、SQLの結果をまとめて配列に格納することが可能です。

【PHP入門】MySQLの基本を解説!
【PHP入門】MySQLの基本を解説!
10年物のMacBookがそろそろ限界なので、買い換えようと考えているライカです。 PHPでデータを扱うとき、 ...

PDOのfetchAllの基本

PDOでデータベースと連携した際、SQLで検索したデータを全て一括で配列に取り込むメソッドがfetchAllです。では、このfetchAllはどのように使えばいいのでしょうか。PDOに詳しくない方に、fetchAllの使い方の基本について解説します。

そもそもfetchとは

今回紹介するfetchAllは、fetchとallの2つの語から作られた造語です。では、fetchとはどういう意味でしょうか。

fetchとは、英語で取ってくる、呼んでくる、連れてくるといった意味の動詞です。そして、PHPのPDOにもfetchというメソッドがあり、その機能はデータベースの結果セットから1行分だけを取ってくるというものです。

つまり、
fetchAllは、fetchメソッドと同じようにSQLの結果を取ってくるメソッドですが、1行ではなく全て(all)の行を一度に取ってくるメソッドです。

fetchAllの文法

fetchAllは、PDOで接続したデータベースで実行したSQLの結果全てを配列として返すメソッドです。なお、このメソッドは単体で使用するのはなく、PDOのqueryメソッドやexecuteメソッドの結果作成されるPDOStatementオブジェクトのメソッドとして実行されます。

PDOのfetchAllの文法

fetchAllメソッドを使った例

この例では$dsnなどの変数に格納したデータベースの接続に必要な情報を使ってPDOをインスタンス。

その後$sqlに格納したSQLを使ってデータベースに問い合わせし、その結果をfetchAllメソッドで変数$rowsに取り出す処理です。

PHPオンラインで学習しよう!サイトやスクールを紹介
PHPオンラインで学習しよう!サイトやスクールを紹介
皆さんこんにちは。PHPはWEB開発の現場で広く使われているプログラミング言語です。 需要が高く初心者でも比較 ...

CakePHPで使えるfetchAllメソッド

先ほどPHPの標準で使えるPDOのfetchAllメソッドを紹介しましたが、PHP用のフレームワークには専用のデータベース接続機能を備えたフレームワークが利用されています。その中でも以前から使われているフレームワークがCakePHPです。

CakePHPには、PDOのfetchAllメソッドと同じ機能が用意されており、それがfetchallメソッドです。次からのその機能について紹介します。

CakePHPでSQL文を実行するには

CakePHPにはSQLを実行するための機能、ConnectionManagerクラスが用意されています。そしてこの機能を利用することで、SQLを実行し、データベースの検索結果を受け取ることができます。

次にCakePHPでSQLを実行し、その結果をfetchAllメソッドで受け取る例を紹介します。なお、ここで使われるfetchAllメソッドは、先ほど紹介したPDOのfetchAllメソッドとは別の機能なので注意してください。

ConnectionManagerクラスによるSQL実行例

CakePHPのConnectionManagerクラスを利用するには、useステートメントを使って必要なクラスを読み込みます。

そして、ConnectionManagerをインスタンスし、まずはSQLを実行するexecuteメソッド、続いてSQLの結果を全て取り出すfetchAllメソッドを使い、結果を変数$resultに格納しています。

まとめ

今回紹介したようにfetchAllとは、PHPのPDOを利用してSQLサーバーで検索した結果を受け取る際、fetchが1行ずつ取り出すのみ対し、一度にまとめて取り出すメソッドです。

なお、fetchAllで取り出したデータは、繰り返し処理でよく利用される配列に格納されるので、いろいろな処理で利用できます。ぜひ、うまく活用してください。

ただし、SQLの作り方によっては巨大なデータを一度に読み込んでしまい、処理が遅くなることがあります。必要なデータのみ抽出できる効率の良いSQLの結果を受け取る際にfetchAllメソッドを利用しましょう。

phpのfor文とforeach文で配列(array)を操作する方法を解説
phpのfor文とforeach文で配列(array)を操作する方法を解説
こんにちは。 最近ジューサーを購入し、毎朝スムージーを作って優雅な生活に一歩近づいただーだいです。 phpの初 ...

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

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