ThinkPHP2.1 读取SqlServer数据(并解决SqlServer中DateTime显示问题)
2012-01-07 15:08 林爵 阅读(2832) 评论(2) 收藏 举报在做一个系统,因为其中有一个考勤模块需要读取门禁设备的数据,数据存储在SqlServer中,但是项目默认配置为MySQL。解决了一些小问题,记录一下。
首先是在控制器中怎么通过额外的模型去读取SqlServer中的数据:
// 新建一个高级模型类,因为后面需要用到多数据库连接和切换
$AccessModel = new AdvModel();
// 定义新数据库连接的参数
$connection = array(
// 确定你已经有mssql数据库适配器
'dbms' => 'mssql',
'username' => 'sa',
'password' => '',
// 注意HostName填写你的Sql Server服务器名称,不是Localhost
'hostname' => 'SQLSERVER',
'database' => 'manager'
);
// 增加数据库连接,默认的Mysql连接标识符是0开始,所以自己增加的要从1开始
$AccessModel->addConnect($connection, 1);
// 切换到Sql Server数据库,我上面定义的标识符是1
$AccessModel->switchConnect(1);
// 调试下输出
dump($AccessModel->query("SELECT DISTINCT * FROM even WHERE ID = 1"));
$AccessModel = new AdvModel();
// 定义新数据库连接的参数
$connection = array(
// 确定你已经有mssql数据库适配器
'dbms' => 'mssql',
'username' => 'sa',
'password' => '',
// 注意HostName填写你的Sql Server服务器名称,不是Localhost
'hostname' => 'SQLSERVER',
'database' => 'manager'
);
// 增加数据库连接,默认的Mysql连接标识符是0开始,所以自己增加的要从1开始
$AccessModel->addConnect($connection, 1);
// 切换到Sql Server数据库,我上面定义的标识符是1
$AccessModel->switchConnect(1);
// 调试下输出
dump($AccessModel->query("SELECT DISTINCT * FROM even WHERE ID = 1"));
输出内容如下,
array(1) {
[0] => array(10) {
["ID"] => string(1) "1"
["CardID"] => int(5747837)
["UserName"] => string(6) "XXX"
["EvenTime"] => string(18) "09 18 2011 8:01PM"
["EventName"] => string(12) "内部刷卡开门"
["ControlName"] => string(6) "南大门"
["DoorName"] => string(4) "出门"
["OpenDoor"] => int(1)
["EventGroup"] => int(1)
["RegionID"] => NULL
}
}
[0] => array(10) {
["ID"] => string(1) "1"
["CardID"] => int(5747837)
["UserName"] => string(6) "XXX"
["EvenTime"] => string(18) "09 18 2011 8:01PM"
["EventName"] => string(12) "内部刷卡开门"
["ControlName"] => string(6) "南大门"
["DoorName"] => string(4) "出门"
["OpenDoor"] => int(1)
["EventGroup"] => int(1)
["RegionID"] => NULL
}
}
这里的EvenTime不是我想要的时间格式,因为它没办法用PHP内置的 strtotime 函数转为UNIT时间戳。
打开 php.ini ,找到 mssql.datetimeconvert 这一项。
; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
mssql.datetimeconvert = On
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
mssql.datetimeconvert = On
将 mssql.datetimeconvert 改为Off,让datetime类型的数据用YYYY-MM-DD hh:mm:ss这样的形式返回。
array(1) {
[0] => array(10) {
["ID"] => string(1) "1"
["CardID"] => int(5747837)
["UserName"] => string(6) "XXX"
["EvenTime"] => string(19) "2011-09-18 20:01:44"
["EventName"] => string(12) "内部刷卡开门"
["ControlName"] => string(6) "南大门"
["DoorName"] => string(4) "出门"
["OpenDoor"] => int(1)
["EventGroup"] => int(1)
["RegionID"] => NULL
}
}
[0] => array(10) {
["ID"] => string(1) "1"
["CardID"] => int(5747837)
["UserName"] => string(6) "XXX"
["EvenTime"] => string(19) "2011-09-18 20:01:44"
["EventName"] => string(12) "内部刷卡开门"
["ControlName"] => string(6) "南大门"
["DoorName"] => string(4) "出门"
["OpenDoor"] => int(1)
["EventGroup"] => int(1)
["RegionID"] => NULL
}
}
解决。
浙公网安备 33010602011771号