クラスを指定してデータを取得する

 結果セットをオブジェクトにセットすると、PHPプログラム内で取得したデータを扱いやすくなります。データをオブジェクトとして取得するには次の方法が用意されています。

■ fetchメソッドを使う

 フェッチスタイルに「FETCH_CLASS」を指定して取得すると、指定したクラスのオブジェクトにデータを格納して取得することができます。このフェッチスタイルを使う前に、「setFetchMode」メソッドを使って、マッピングするクラスを指定します。

クラス名 PDOStatement
メソッド名 setFetchMode
概要 フェッチモードを設定する
パラメーターリスト
パラメター名 説明
int $mode フェッチモード。PDO::FETCH_XXXXの一つ
string $classname クラス名
array $ctorargs コンストラクターの引数
返り値
bool 成功したらTRUE、失敗したらFALSEを返す
setFetchModeメソッドの仕様

○ ファイル

  行を格納するためのクラスを作成しましょう。次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 User.php

○ プログラム

 次のようにプログラムを記述してください。

User.php

  1. <?php
  2. class User
  3. {
  4.  //プロパティ
  5.  public $id;
  6.  public $user_name;
  7.  public $password;
  8.  public $name;
  9. }

○ ファイル

 「FetchBoundTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 FetchClassTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

FetchClassTest.php

  1. <?php
  2. //クラスファイルを読み込む
  3. require_once 'User.php';
  4. $host = 'localhost'; //データベースサーバー名
  5. $dbname = 'books'; //データベース名
  6. $username = 'root'; //データベースユーザー名
  7. $password = ''; //パスワード
  8. ?>
  9. <!DOCTYPE html>
  10. <html lang="ja">
  11.  <meta charset="utf-8">
  12.  <head>
  13.   <title>SELECT文実行</title>
  14.  </head>
  15.  <body>
  16. <?php
  17. try{
  18.  //データベースに接続する
  19.  $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
  20.   $username,
  21.   $password);
  22.  //SQL文を実行する
  23.  $result = $pdo -> query('SELECT * FROM users;');
  24.  //フェッチするクラスを指定する
  25.  $result -> setFetchMode(PDO::FETCH_CLASS, 'User');
  26.  //データを取得する
  27.  while($row = $result -> fetch(PDO::FETCH_CLASS)){
  28.   var_dump($row);
  29.  }
  30. }catch(PDOException $e){

○ 実行結果

実行結果
実行結果

○ 解説

 28行目で、フェッチモードを設定しています。パラメーターにクラス名を渡すことで、クラスでフェッチするときにデータをセットしたオブジェクトが生成されます。

 31行目で実際にフェッチしています。32行目で出力される内容を確認すると、オブジェクトが生成され、各プロパティーに各列のデータがセットされていることを確認できます。

■ fetchObjectメソッドを使う

 PDOStatementクラスの「fetchObject」メソッドでクラス名を指定して呼び出すと、そのクラスのオブジェクトにデータを格納して取得することができます。

クラス名 PDOStatement
メソッド名 fetchObject
概要 フェッチモードを設定する
パラメーターリスト
パラメター名 説明
string $class_name 作成するクラス名
返り値
mixed 列名に対応するプロパティーにデータを格納したオブジェクトを返す。失敗したらFALSEを返す
fetchObjectメソッドの仕様

○ ファイル

 「FetchClassTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 FetchObjectTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

FetchObjectTest.php

  1.  //SQL文を実行する
  2.  $result = $pdo -> query('SELECT * FROM users;');
  3.  //データを取得する
  4.  while($row = $result -> fetchObject('User')){
  5.  var_dump($row);
  6.  }
  7. }catch(PDOException $e){

○ 実行結果

実行結果
実行結果

○ 解説

 28行目でfetchObjectメソッドを、Userクラス名を指定して呼び出しています。29行目で出力される結果を見ると、Userクラスのオブジェクトとして各列名のプロパティーにデータがセットされていることを確認できます。

前へ   次へ