时间戳未插入mysql表中

时间:2013-02-27 10:44:00

标签: php mysql timestamp sql-insert

我有以下表结构:

recid                   int(11) 
userid                  int(11)
reset_requested_on      timestamp CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
valid_until             timestamp
sessionid               varchar(255)

当我打印我的数组时,我有这些数据:

    Array
(
    [userid] => 428
    [reset_requested_on] => 1361961459
    [valid_until] => 1362134259
    [sessionid] => b6d444e0ea14768a724308fd1aa64b6d
)

当我执行插入时,只插入recid,用户ID和sessionid,而timestamp字段为空。谁能告诉我我做错了什么?

编辑:

当我手动添加记录时,如果我在时间戳字段中选择FROM_UNIXTIME,我会正确插入记录。

任何人都知道如何将此选项设置为默认值?

的问候,卓然

2 个答案:

答案 0 :(得分:0)

当你插入时,你错过了时间戳的引号(“)吗?

"1362134259"

我不确定。试试这种方式。

$newdata = array('userid' => $data['userid'],
                 'reset_requested_on' => "$timestamp",
                 'valid_until' => "$new_timestamp",
                 'sessionid' => $this->session->userdata('session_id'));

答案 1 :(得分:0)

你尝试过日期而不是秒吗?

基本上,要么在MySQL上使用FROM_UNIXTIME(1362134259),要么在php上使用strtotime(“Y-m-d H:i:s”,1362134259)。

我对codeigniter不太熟悉,但我假设像:

$data = array(
   'userid' => 428,
   'reset_requested_on' => date("Y-m-d H:i:s"),
   'valid_until' => date("Y-m-d H:i:s"),
   'sessionid' => 'b6d444e0ea14768a724308fd1aa64b6d'
);

应该完美无缺。

时间戳和日期时间之间的主要区别在于如何在内部保存数据。时间戳字段保存为自Unix纪元存储为32位整数以来的秒数(因此它易受y2k38错误影响),而datetime字段以已知格式保存以表示日期。对于日期时间字段,数学运算比时间戳字段更昂贵,但从“客户”的角度来看,除非您使用的日期晚于2038年,否则它们大多是相同的。

因此,离开PHP并进入MySQL的查询应该具有预期格式的日期,例如“Y-m-d H:i:s”。