2014-12-10 3 views
0

Yii 1.x에서 에 MySQL FROM UNIXTIME을 올바르게 사용해야합니까?CDbMigration을 사용하여 MySQL 테이블에 현재 시간을 입력하십시오.

난 그냥 인쇄 this answer 때에서의 MySQL의 DateTime 필드, 타임 스탬프로 주어진 현재의 시간을 변환 솔루션을 빌렸다 :

echo 'FROM_UNIXTIME('.$base.')'."\n"; 
echo 'FROM_UNIXTIME('.$sixDaysLater.')'."\n"; 

다 잘 보인다

FROM_UNIXTIME(1418223600) 
FROM_UNIXTIME(1418742000) 

하지만, 마이 그 레이션의 일부로 같은 기술을 사용하려고 할 때 :

$this->insert('contents', array 
(
    'author_id'=>1, 
    'type'=>5, 
    'status'=>1, 
    'category'=>1, 
    'title'=>'title', 
    'body'=>'body', 
    'creation_date'=>'FROM_UNIXTIME('.$base.')', 
    'modification_date'=>'FROM_UNIXTIME('.$base.')', 
    'availability_date'=>'FROM_UNIXTIME('.$sixDaysLater.')', 
    'short'=>'short' 
)); 

이것은 실패합니다. 즉, 마이그레이션은 정상적으로 진행되지만 phpMyAdmin에서이 레코드의 관련 필드에 예상 값이 아닌 0 (0000-00-00 00:00:00)이 채워진 것을 볼 수 있습니다.

무엇이 누락 되었습니까? insert의 값이 인코딩/이스케이프되고 있기 때문에 그렇습니까?

new CDbExpression("NOW()"); 

는 말은 :

'creation_date'=>new CDbExpression("NOW()") 

을 아니면 FROM UNIXTIME을 사용하려는 경우 동일한 작업을 수행 할 수 있습니다

+1

날짜가 모두 0 일은 잘못된 날짜 문자열을 삽입하려고했음을 의미합니다. '$ base' 값이 유효하지 않은 날짜를 얻었을 때 그 값을 확인 했습니까? –

+0

네, 위에서 볼 수 있듯이 (첫 번째 예), 값은 올바른 타임 스탬프입니다. 아래의 대답과 내 자신의 두 번째 생각을 바탕으로, 전체 값이 벗어 났기 때문에 그 문제가 있다고 가정합니다. – trejder

답변

2

대신 CDBExpression를 사용할 수 있습니다.

CDbExpression은 이스케이프가 필요없는 DB 식을 나타냅니다.

+0

젠장, 나는 잊어 버리고, 얼마나 유용한'CDbExpression'인지 잊지 마라! : | 고마워, 어쨌든 ... – trejder

+0

@trejder 안녕하세요.) –

관련 문제