代码改变世界

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"));

 

输出内容如下,

 

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
  }
}

 

这里的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

 

将 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
  }
}

 

解决。