-1

我有以下表结构:

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

当我 print_r 我的数组时,我有以下数据:

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

当我执行插入时,只有 recid、用户 id 和 sessionid 被插入,而时间戳字段为空。谁能告诉我我做错了什么?

编辑:

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

任何人都知道我怎样才能将此选项设置为表格中的默认值?

问候,佐兰

4

2 回答 2

0

您插入时是否错过了时间戳的引号(“)?

"1362134259"

我不知道。试试这个方法。

$newdata = array('userid' => $data['userid'],
                 'reset_requested_on' => "$timestamp",
                 'valid_until' => "$new_timestamp",
                 'sessionid' => $this->session->userdata('session_id'));
于 2013-02-27T10:46:12.770 回答
0

您是否尝试过传递日期而不是秒?

基本上,要么在 MySQL 上使用 FROM_UNIXTIME(1362134259),要么在 php 上使用 strtotime("Ymd 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 错误的影响),而日期时间字段以已知格式保存以表示日期。日期时间字段的数学运算比时间戳字段更昂贵,但从“客户”的角度来看,除非您使用的日期晚于 2038 年,否则它们几乎是相同的。

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

于 2013-02-27T11:07:41.193 回答