【php】SQL Serverの日付型カラムがDatetimeクラスのオブジェクトとして取得されてしまう
問題
Windows + IIS + php5.4 + SQL Server(SQLSRV) をしていて、問題です。
日付型カラムを取得したときに、日付のカラムは文字列(2012-09-11 12:34:56 など)ではなくて、Datetime型のオブジェクトになっているみたいです。
例
$serverName = "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
$sql = "select * from member";
$stmt = sqlsrv_query( $conn, $sql );
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
var_dump($row);
}
↓
...
["JOIN_DATE"]=>
object(DateTime)#1 (3) {
["date"]=>
string(19) "2012-04-20 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
...
そういうことなら、$row['JOIN_DATE']->format('Y-m-d H:i:s'); といった形で、Datetimeオブジェクトのメソッドを使って日付の文字列は取得できるのですが。。。
やっぱり今までどおり、文字列で欲しい。どうにもならないでしょうか?
答え
接続に以下のオプションを追加すると、日付が文字列として取得できる。
"ReturnDatesAsStrings"=>true
上のサンプルコードのsqlsrv_connect()関数の第2引数のオプションの配列に含める。
例
結果
... ["JOIN_DATE"]=> string(23) "2012-04-20 00:00:00.000" ...
参考
http://msdn.microsoft.com/en-us/library/ee376928%28SQL.90%29.aspx