PHP adodb COM记录集返回变量:日期/时间的__set_state,我怎么能把它们作为字符串


PHP adodb COM recordset returning variant:__set_state for dates/times, how can I just get them as strings?

我正在访问PHP中的mssqldb,并将连接创建为新的COM()对象。我的查询运行得非常好。当我在Microsoft SQL Server 2008中进行查询时,一切看起来都很好,日期/时间显示在列中并且可读。

但是,当我运行相同的查询并用PHP返回结果时,我会遍历结果,如下所示:

$selected_fields = array("FS.fund_name", "M.media_id", "MT.media_type_name", "modified_date", "file_upload_date", "issued_date", "filename");
//query goes here
$record_set = new COM("ADODB.Recordset");
while(!$record_set->EOF){ //loop through query results and add to inline cache variable
  $temp_record = array();
  foreach($selected_fields as $fieldname){ //go through fields and add to array
      $fieldname_array = explode(".", $fieldname); //separate table and column
      $fieldname = $fieldname_array[sizeof($fieldname_array)-1];
      $temp_record[$fieldname] = $record_set->fields[$fieldname]->value;
  }
  print_r($temp_record);
  $rs_array[] = $temp_record;
  $record_set->movenext();
}

当我打印每个$temp_record时,它们最终看起来像这样:

Array ( [fund_name] => TEST [media_id] => 1001 [media_type_name] => 8937 Tax Forms [modified_date] => variant Object [file_upload_date] => variant Object [issued_date] => variant Object [filename] => form8937test.pdf )

所以日期是某种对象,我不知道如何在PHP中访问它们。当我把它们保存为缓存文件时,它们有这样的值:

variant::__set_state(array())

如何以可以使用PHP操作的格式检索日期/时间?我想按年份筛选它们,并按最近的分类。

根据Variant Object文档,您应该能够通过访问它

$temp_record['modified_date']->value; 

$val = (string)$temp_record['modified_date']; 

来自同一文档:

只有当存在直接不会导致丢失的类型之间的映射信息在所有其他情况下,结果都作为实例返回VARIANT类的。

因此,要检查是否需要强制转换,只需检查是否有Variant类的对象:

if (is_object($var) && $var instanceof Variant) {
    $val = (string)$var;
} else {
    $val = $var;
}