PHP adodb COM 记录集返回变体:日期/时间的__set_state,我怎样才能将它们作为字符串获取?

Posted

技术标签:

【中文标题】PHP adodb COM 记录集返回变体:日期/时间的__set_state,我怎样才能将它们作为字符串获取?【英文标题】:PHP adodb COM recordset returning variant:__set_state for dates/times, how can I just get them as strings? 【发布时间】:2013-07-22 18:38:07 【问题描述】:

我正在 php 中访问 mssql 数据库并将连接创建为新的 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'];访问它 它工作!我所要做的就是将其转换为字符串。谢谢!现在 - 在我的迭代期间有什么方法可以检查我是否需要转换它? 【参考方案1】:

根据Variant Object文档,你应该可以通过

$temp_record['modified_date']->value; 

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

来自同一个文档:

仅当存在直接变量时,变体才会转换为 PHP 值 不会导致丢失的类型之间的映射 信息。在所有其他情况下,结果作为实例返回 VARIANT 类。

所以要检查是否需要强制转换,只需检查您是否有 Variant 类的对象:

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

【讨论】:

以上是关于PHP adodb COM 记录集返回变体:日期/时间的__set_state,我怎样才能将它们作为字符串获取?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ADODB 记录集执行联合更新​​查询

从ADODB记录集复制数据时,Excel表丢失数字格式

将 Access 报表的记录源设置为 ADODB 记录集

将 ADODB 记录集拆分为 Excel 工作表?

如何从 adodb 记录集中访问存储过程中的变量?

在 VBA 中对断开连接的 ADODB 记录集应用过滤器