今までphpではPDOを使ってmysqlのテーブルデータを取得(select文)していた訳ですが、テーブルのカラム数が多い時は結構しんどい思いをしてきました。

while($record = $stmt->fetch(PDO::FETCH_ASSOC)){
//ここにレコードのデータをオブジェクトにセットするコード・・・
}

$stmtはクエリ発行後のPDOStatemenオブジェクトです。whileループの中でテーブルのレコードに合わせたデータオブジェクトを作成し、データオブジェクトのセッタを使って1項目ずつセットしていく・・・

ただ、これだとやっぱりしんどいのでどうにかならないものかとネットで調べたらPDOStatementにfetchObject()
というメソッドを発見。下のように使う事ができます。

$aryRecords = array();
while($record = $stmt->fetchObject('hogeClass')){
$aryRecords[] = $record;
}

hogeClassはテーブルのレコードにあわせたデータクラスです。「$stmt->fetchObject('hogeClass')」はhogeClassオブジェクトを返してくれます。そう、ORマッピングです。これのお陰でかなり楽になりました。PDOて標準でORマッピングがあったんだね(試してないけどPDO::FETCH_CLASSを使えば同じ事ができるっぽい)

あと、データクラスは今までprivateなプロパティとそれのセッタ、ゲッタを書いていたけど(昔javaばっかり書いてたので・・・)、これも面倒なのでマジックメソッドの「__get(), __set()」を使う事にしました。

ただ、マジックメソッドはやっぱり処理が遅いみたいなので扱うデータを多い場合はやめた方がいいかも。

ともかく、上の二つの改善でDB周りのコーディングが凄く楽になったのでよかった。

・参考図書
パーフェクトPHP (PERFECT SERIES 3)/小川 雄大
¥3,780
Amazon.co.jp