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,我怎样才能将它们作为字符串获取?的主要内容,如果未能解决你的问题,请参考以下文章