当前位置:Gxlcms > PHP教程 > php5.2调用sqlserver2008里由于打印出来的是DateTimeObject不是正常的时间也不是时间戳

php5.2调用sqlserver2008里由于打印出来的是DateTimeObject不是正常的时间也不是时间戳

时间:2021-07-01 10:21:17 帮助过:25人阅读

头回用PHP+sqlsrv这种非主流组合 不知道怎么处理这个时间对象 有没高手指点一二
[0] => Array
(
[UserId] => 10
[Account] => P6000001
[PassWord] => 123456
[LoginNumber] => 4
[UpdateTime] => DateTime Object
(
)

[RegistTime] => DateTime Object
(
)

[EndTime] => DateTime Object
(
)

[Status] => 0
[CreateTime] => DateTime Object
(
)

[MachineId] => 135
)
怎么把这个时间对象转换成时间戳


回复讨论(解决方案)

先尝试用 date 函数转换
比如你读取的数据在 $r 数组中,则
echo date('Y-m-d H:i:s', $r[0]['UpdateTime']);
看看

如不行,则请贴出
echo serialize($r);
的结果
应该选择确实有值的记录

===源码
$sqlsrv = new Sqlsrv();
$sql = "SELECT TOP 1 [UpdateTime]
,[RegistTime]
,[EndTime]
FROM [User] ";
$stmt=$sqlsrv->select($sql);
p($stmt);
echo date('Y-m-d H:i:s', $stmt[0]['UpdateTime']);//此行没有被打印出来
echo '
';
echo serialize($stmt);
===以下为打印结果
Array
(
[0] => Array
(
[UpdateTime] => DateTime Object
(
)

[RegistTime] => DateTime Object
(
)

[EndTime] => DateTime Object
(
)

)

)

a:1:{i:0;a:3:{s:10:"UpdateTime";O:8:"DateTime":0:{}s:10:"RegistTime";O:8:"DateTime":0:{}s:7:"EndTime";O:8:"DateTime":0:{}}}

序列化后也看不到内容,表示你的字段为空
你应该选择有数据的字段进行测试

在sqlserver里面 是有数据的 不是空的 (在百度到的帖子里 别人读取的时间不友好 我遇到的却是一个datetime object 而且 用get_object_vars()得到的是一个空数组 真不知道怎么整这个对象)
UserId Account PassWord LoginNumber UpdateTime RegistTime EndTime Status CreateTime MachineId
10 P6000001 123456 4 2013-09-27 13:16:44.503 2013-03-21 10:18:37.000 2019-04-19 17:27:53.047 0 2013-04-19 17:27:53.050 135

贴出你的代码

贴出你的代码


代码在二楼 {sql server里 这三个字段的类型就是 datetime 难道跟mysql里的datetime不一样}
我写了一个连接类
class Sqlsrv{
public $connect;
function __construct($host="(local)",$uid="sa",$pwd="123456",$dbname="tupoemanager"){
$connectionInfo = array("UID"=>$uid,"PWD"=>$pwd,"Database"=>$dbname);
$this->connect = sqlsrv_connect( $host,$connectionInfo);
sqlsrv_query("set names 'utf8'");
//echo "
";  
}
//select
function select($sql,$affected=2){
$result = sqlsrv_query($this->connect,$sql);
//var_dump($result);
$resultArr = array();
if($affected==2){

while($row =sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){
$resultArr[] =$row;
}

}else{
$resultArr = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC);
}
return $resultArr;
}

//query
function query($sql){
return sqlsrv_query($this->connect,$sql);
}
//
function affected($stmt){
return sqlsrv_rows_affected( $stmt);
}
}
date_default_timezone_set("PRC");

查询时用CONVERT()转换一下就OK了

$sql = "SELECT TOP 1
CONVERT(varchar(19),UpdateTime,120)as UpdateTime
FROM [User] ";
$stmt=$sqlsrv->select($sql);

人气教程排行