2016-06-08 27 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中會有不同的值。