PDORowオブジェクトを使用 FETCH_LAZY
ハッシュを使用 FETCH_ASSOC
重複カラム回避 FETCH_NAMED
配列を使用 FETCH_NUM
ハッシュ及び配列を使用 FETCH_BOTH
stdClassを使用 FETCH_OBJ
使用クラス指定 FETCH_CLASS
PDOはPEAR::DBのC言語化(PECL化)として開発がスタートしている。
だが、どうもPEAR::DBと挙動が大きく異なる場合が多い。
各種FETCHパラメータを駆使してデータを取得するわけだが、
その結果がどういう風になって出てくるのかまとめられたところがない。
また、FETCHパラメータのマニュアルを読んでもイマイチピンと来ない。
そこで、少しまとめてみようと思う。
決して風邪で寝込んで暇だったからと言う訳でない。
今回調べた環境を下記に示す
あくまで下記環境での結果なので結果が異なったからと言って文句を言わないで頂きたい。
使えるねっとVPS RedHat? Enterprise Linux 3
MTA以外の中身を全部入れ替えることが出来るので、
これを採用。
MySQL5.0.22 RHEL3 RPM
PHP5.1.4(CLI)
PDO 1.3
PDO_MySQL 1.2
テーブルは二つ用意した。
ユーザー一覧テーブル(user_table)とそのユーザーが所有しているホームページの一覧(user_homepage)の二つ。
users_idでリレーションしている。
ToDo?: ER図
user_table +----------+------------+-----------------+ | users_id | users_name | users_email | +----------+------------+-----------------+ | 1 | TARO | taro@matrix.jp | | 2 | JIRO | jiro@matrix.jp | | 3 | SHIRO | shiro@matrix.jp | | 4 | dozo | dozo@matrix.jp | +----------+------------+-----------------+ user_homepage +----------+-------------+----------------+-----------------------------+ | users_id | homepage_id | homepage_url | homepage_name | +----------+-------------+----------------+-----------------------------+ | 1 | 1 | TARO Homepage | http://taro.matrix.jp | | 2 | 1 | JIRO Homepage | http://jiro.matrix.jp | | 3 | 1 | SHIRO Homepage | http://shiro.matrix.jp | | 4 | 1 | dozo Homepage | http://dozo.matrix.jp | | 4 | 2 | dozo Homepage2 | http://dozo.matrix.jp/pear/ | | 4 | 3 | dozo Homepage3 | http://dozo.matrix.jp/blog/ | +----------+-------------+----------------+-----------------------------+
共通している部分は以下。
パラメータの詳細ページではこれ以降の部分のみ記述してます。
<? $dbObj = new PDO("mysql:host=127.0.0.1;port=3306;dbname=test", 'root', ''); $dbObj->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $dbObj->exec("set names 'ujis'"); ?>
理由はわからないがPDOのパラメータの記述方式が、
PHP5.0とPHP5.1以降では異なる
PHP5.0ではPDO_[パラメータ]
PHP5.0 PDO_FETCH_ASSOC PDO_FETCH_OBJ
PHP5.1ではPDO::[パラメータ]
PHP5.1 PDO::FETCH_LAZY PDO::FETCH_BOUND
(PDOに限らないかもしれない)
取得する方法として、 結果セットが返すカラム名と同じ名前の変数を有するオブジェクトとして各行を返す方法を 指定します。 PDO::FETCH_LAZY は、アクセスされたものと同じ名前のオブジェクト変数を作成します。
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、 PDO::FETCH_ASSOC はカラム名毎に 1 つの値のみ返します
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、 PDO::FETCH_NAMED はカラム名毎に値の配列を返します。
結果セットの対応するカラム番号にふられているものと同じ添字を付けた 配列として各行を返す取得方法を指定します。 番号は0から始まります。
結果セットと同じカラム名と0から始まるカラム番号を付けた配列として各行を返す 方法を指定します。
結果セットが返すカラム名と同じ名前のプロパティを有する オブジェクトとして各行を返す方法を指定します。
FETCH_BOUND
結果セットのカラムの値を PDOStatement::bindParam() または PDOStatement::bindColumn() メソッドでバインドされた PHP変数に代入し、 TRUEを返すという取得方法を指定します。
FETCH_COLUMN
結果セットの次の行から指定された一つのカラムのみを返す取得方法を指定します。
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの新規インスタンスを返す取得方法を指定します。
FETCH_INTO
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの既存のインスタンスを更新する取得方法を指定します。
FETCH_FUNC
FETCH_GROUP
FETCH_UNIQUE
FETCH_CLASSTYPE
FETCH_SERIALIZE