PDOで普通にDATETIME型やTIMESTAMP型の取得すると、PHP的には文字列になってしまう。
PDOStatement::bindColumnとかでDateTimeオブジェクトに変換できれば美しいんだけど、できなそうだったので泥臭く実装してみました。
// SELECT実行
$sth -> execute();
// DATETIME型のカラム名配列を作成する
$datetimeColumnNameArray = array();
for ($i = 0; $i < $sth -> columncount(); ++$i ) {
// カラムのメタ情報を取得
$columnMeta = $sth -> getColumnMeta( $i );
// DATETIME型の場合
if ( strcmp( $columnMeta['native_type'], 'DATETIME' ) == 0 ) {
$datetimeColumnNameArray[] = $columnMeta['name'];
} else {
;
}
}
// 結果を入れる配列
$valueArray = array();
// 結果を取得
while ( $value = $sth -> fetch( PDO::FETCH_ASSOC ) ) {
// DATETIME型配列に含まれていたら、DateTimeオブジェクトにする
foreach ( $datetimeColumnNameArray as $datetimeColumnName ) {
$value[$datetimeColumnName] = new DateTime( $value[$datetimeColumnName] );
}
$valueArray[] = $value;
}
レコード数×DATETIME型のカラム数だけループが回るから、負荷的にちょっと心配。
何か他に良いやり方を知っている方がいれば、是非とも教えて下さいませm(__)m