2016-06-08 75 views
1

我命令:Yii的CDbCommand返回比MySQL客户不同的价值

$night_command = Yii::app()->db->createCommand() 
    ->select('COUNT(d1.id)') 
    ->from('diary1 as d1') 
    ->where('d1.deleted = 0 AND TIME(d1.datetime_created) BETWEEN "04:59:00" AND "17:59:00"'); 
$night_command->getText(); // this is query that i copy to client app 
$night_command->queryScalar(); // returns 4 

$night_command->getText()返回查询:

SELECT COUNT(d1.id) 
FROM `diary1` `d1` 
WHERE d1.deleted = 0 AND TIME(d1.datetime_created) BETWEEN "04:59:00" AND "17:59:00" 

当我复制并运行此查询 - 我得到25(不是4)。为什么?似乎是比较时间的问题,因为没有它,一切运作良好。 datetime_created列有DATETIME类型。

+0

哪一个错了? yii结果?你可以在你的代码之前在db组件上使用查询缓存吗? – georaldc

回答

0

问题出在配置db组件。它有一个参数

'initSQLs' => array(
    'SET time_zone = "+10:00"', 
), 

里面加+10(+8在我的情况)小时DATETIME列。例如。如果在数据库中我有值“11.01.2016 13:21:05”(我的本地时区为UTC + 2),那么Yii返回值“11-01-2016 21:21:05”(UTC + 10)。所以,或者注释这个参数或者记住,DATETIMETIME列在Yii中会有不同的值。